Page 1 of 1

SET MULTIPLE OFF

Posted: Mon Jan 16, 2006 4:54 pm
by Carlos Sincuir
Hola,
creo que esta pregunta ya la hicieron anteriormente pero no encuento el mensaje, pero necesito que mi aplicación hecha con FWH+xHarbour no se ejecute dos veces en la misma computadora, y SET MULTIPLE OFF no funciona con xharbour.
Alguien me puede dar de nuevo la solución, Gracias.

Carlos Sincuir

Posted: Mon Jan 16, 2006 5:43 pm
by Antonio Linares
Carlos,

IF ISEXERUNNING( CFILENAME( HB_ARGV( 0 ) ) )
RETURN NIL
ENDIF

Posted: Tue Jan 17, 2006 5:07 pm
by Carlos Sincuir
Antonio,
obtengo el Error: Unresolved external _HB_FUN_ISEXERUNNING ...
Estoy utilizando FWH2.5 + xHarbour

Saludos,
Carlos Sincuir

Antonio Linares wrote:Carlos,

IF ISEXERUNNING( CFILENAME( HB_ARGV( 0 ) ) )
RETURN NIL
ENDIF

Posted: Tue Jan 17, 2006 7:03 pm
by Antonio Linares
Carlos,

La función IsExeRunning() se implementó en el build del mes de Febrero del 2005.

Posted: Wed Jan 18, 2006 2:37 am
by Carlos Sincuir
Gracias Antonio, ya me funciono, estaba enlazanado las libs de FW24

Saludos.

Carlos Sincuir

Posted: Sun Aug 13, 2006 3:07 pm
by quique
Antonio Linares wrote:Carlos,

La función IsExeRunning() se implementó en el build del mes de Febrero del 2005.
Antonio ¿como puedo hacer para que el programa que ya está corriendo tome el foco?

Posted: Mon Aug 14, 2006 10:39 am
by Antonio Linares
Quique,

Aqui tienes un ejemplo completo funcionando:

Code: Select all

#include "FiveWin.ch"

#define GW_CHILD      5 
#define GW_HWNDNEXT   2

function Main()

   local oWnd 
   
   if IsExeRunning( cFileName( HB_ARGV( 0 ) ) )
      ShowApplication()
   else   
      DEFINE WINDOW oWnd TITLE "Test"
   
      ACTIVATE WINDOW oWnd
   endif   
   
return nil   

function ShowApplication()

   local hWnd := FindWnd( cFileNoExt( HB_ARGV( 0 ) ) )
   
   if hWnd != nil
      SetForeGroundWindow( hWnd )
   endif   
   
return nil   

function FindWnd( cTitle ) 

   local hWnd := GetWindow( GetDesktopWindow(), GW_CHILD ) 

   while hWnd != 0 
      if Upper( cTitle ) $ Upper( GetWindowText( hWnd ) ) 
         return hWnd
      endif 

      hWnd = GetWindow( hWnd, GW_HWNDNEXT ) 
   end 

return nil
Observa que el título de la ventana es igual que el nombre del EXE. En caso de ser distintos, has de modificar el código.

Posted: Mon Aug 14, 2006 3:43 pm
by Marco A. Delgado
Hola Antonio.

Y como se le hace para que la aplicacion tome el foco, para que se visualize en caso de estar minimizada.

Saludos
Marco A. Delgado

Posted: Mon Aug 14, 2006 11:51 pm
by quique
Marco A. Delgado wrote:Hola Antonio.

Y como se le hace para que la aplicacion tome el foco, para que se visualize en caso de estar minimizada.

Saludos
Marco A. Delgado
En el código que dio Antonio donde estan los #define agrega:

#define SW_RESTORE 9

y justo antes de setForeGroundWindow( hWnd ) agrega:

if isIconic( hWnd )
showWindow( hWnd, SW_RESTORE )
endIf

Posted: Tue Aug 15, 2006 6:32 am
by Antonio Linares
Quique,

Gracias :-)

Posted: Tue Aug 15, 2006 3:36 pm
by Marco A. Delgado
Pues no... :(

ni toma el foco, ni se restaura la ventana de la aplicación.

Que podra ser, lo he hecho segun lo indicado.

Saludos
Marco A. Delgado.