FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Enviar mensaje al mismo programa abierto antes
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Enviar mensaje al mismo programa abierto antes
Posted: Tue Apr 02, 2013 11:59 PM

Tengo un programa en FW al cual est谩 asociado a una extensi贸n de archivos, as铆 que al dar enter sobre esos archivos se abre el programa de FW, esto est谩 perfecto, el problema es que al dar enter en otro archivo se vuelve a abrir el programa, y eso es lo que no quiero, necesito que solamente se abra una vez y al dar enter sobre otro archivo lo detecte el programa que est谩 abierto 驴como puedo hacer para que lo detecte el mismo programa abierto o que el segundo se lo indique al primero y se cierre?

Saludos

Quique
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Enviar mensaje al mismo programa abierto antes
Posted: Wed Apr 03, 2013 12:59 AM
Prueba as铆

Code (fw): Select all Collapse
If( IsExeRunning( cFileName( hb_argv( 0 ) ) ) )
   MsgStop( 'La aplicaci贸n ya est谩 ejecutandose', 'Atenci贸n...' )
   Return 0
End


Saludos
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Enviar mensaje al mismo programa abierto antes
Posted: Wed Apr 03, 2013 02:04 AM
Gracias, pero esta soluci贸n solo detecta que ya est谩 abierta la aplicaci贸n, lo que hace falta es poder avisarle a la aplicaci贸n lo que ten铆a que hacer la nueva, la idea ser铆a algo as铆:

Code (fw): Select all Collapse
If( IsExeRunning( cFileName( hb_argv( 0 ) ) ) )
聽 聽avisoAplicAbierta( hb_argv( 1 ) )
聽 聽Return 0
End


El problema es 驴como hacer la funci贸n avisoAplicAbierta()?
Saludos

Quique
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Enviar mensaje al mismo programa abierto antes
Posted: Wed Apr 03, 2013 02:48 AM

No entiendo lo que quieres hacer pero se me ocurre que con un archivo externo y mediante un timer verificar si este se modific贸, en consecuencia el programa toma una acci贸n. Solo una idea.

Saludos

Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Enviar mensaje al mismo programa abierto antes
Posted: Wed Apr 03, 2013 03:03 AM

Por ejemplo, das doble click en un archivo mp3 y se abre el Windows Media (o el que tengas definido) vuelves a dar doble clck en otro mp3 y en lugar de abrirse de nuevo, el reproductor cambia la caci贸n por la nueva. Eso es lo que intento hacer.

Un INI con un no creo que sea la soluci贸n, porque parezca inmediato tendr铆as que tener un timer casi inmediato, y estar revisando el disco es una perdida de recursos sin necesidad, siendo que no das doble click todo el tiempo, y si el timer no es peque帽o, el dar doble click no tiene caso, ser铆a mas r谩pido arrastrarlo a la aplicaci贸n, pero todos estamos acostumbrados al doble click (o enter).

Hasta donde tengo entendido, si se puede, porque me parece que el ourXdbu est谩 hecho en fivewin, y tiene esta cualidad, pero es posible que me equivoque y solo me quede esperando como con la opci贸n de arrastrar archivos a un control, lo cual hab铆a visto en un programa que tambi茅n cre铆 que estaba hecho en fivewin, pero ahora creo que no.

Saludos

Quique
Posts: 883
Joined: Thu Dec 24, 2009 12:46 AM
Re: Enviar mensaje al mismo programa abierto antes
Posted: Wed Apr 03, 2013 03:11 AM

=====>

Bayron Landaverry
xBasePHP.com
(215)2226600 Philadelphia,PA, USA
MayaBuilders@gMail.com
Guatemala

FWH25.06--Harbour 3.0.0--BCC7.7--UEstudio 10.10
Windows 10

FiveWin, One line of code and it's done...

Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Enviar mensaje al mismo programa abierto antes
Posted: Wed Apr 03, 2013 04:56 AM
Gracias Bayron, pero mis escasos conocimientos de fivewin no me permiten entenderlo, o ellos utilizan una clase modificada :-)

Seg煤n entiendo en esta secci贸n detectan y env铆an el aviso cuando se abre el programa por segunda vez (horacio no estaba perdido, aqui utilizan la idea del archivo externo, ini en este caso):

Code (fw): Select all Collapse
     IF ( hWnd := FindWindow( 0, APP_TITLE + ' ' + APP_VERSION ) ) != 0
        FOR n := 1 TO PCount()
            cPath := cFilePath( hb_aParams()[n] )
            aEval( Directory( hb_aParams()[n] ), {|aFichero| aAdd( aConexiones, cPath + aFichero[1] ) } )
        NEXT

        oApp:oIniLocal := TIni():New( oApp:cAppPath + 'ourxdbu.ini' )
        aEval( aConexiones, {|c,n| If( c != Nil, oApp:oIniLocal:Set( 'Abrir', 'Fichero' + AllTrim( Str( n ) ) , AllTrim( c ) ), ) } )
        PostMessage( hWnd, 10000 )
        SetForegroundWindow( hWnd )
        RETURN
     ENDIF


y aqu铆 es donde creo que se recibe la se帽al, seg煤n creo es en oWnd:bOpen, el problema ahora es que bOpen no existe en las ventanas de fivewin :-)

Code (fw): Select all Collapse
     oWnd:bInit := {|| CreatePanel( oWnd ),;
                       aEval( aConexiones,;
                              {|c,n| If( c != Nil, tDbuTabla():New( AllTrim( c ) ),) } ),;
                       oWnd:bOnOpen := {|| AbrirTabla() },;
                       oWnd:bOpen := {|aEntries| aEntries := oApp:oIniLocal:GetIniSection( "Abrir" ),;
                                                 aEval( aEntries, {|c,n,cFile| cFile := AllTrim( SubStr( c, At( "=", c ) + 1 ) ),;
                                                                               If( Empty( cFile ),, tDbuTabla():New( AllTrim( cFile ) ) ) } ),;
                                                 oApp:oIniLocal:DelSection( "Abrir" ),;
                                                 oWnd:Cascade() },;
                       oWnd:Cascade() }
Saludos

Quique

Continue the discussion