La Web del Programador: Comunidad de Programadores
 
    Pregunta:  45172 - DETECTAR EXE EJECUTáNDOSE
Autor:  Arturo Yep
Cómo puedo detectar si el ejecutable está activo o no. Esto es para evitar abrir varias veces el mismo programa.

  Respuesta:  Jorge Athanassopoulos
Tendrias que agregar en tu programa principal las siguientes funciones

***** Llama a la funcion

PUBLIC llret
IsActive("Nombre de tu ejecutable.exe")
YaActiva()
IF llret = .t.
Clear WINDOWS
CLOSE DATABASE
CLOSE ALL
Clear ALL
SET sysmenu to default
QUIT
ENDIF

******Funciones

*******************************************************
* FUNCTION IsActive(tcCaption)
*--------------------------------------------------------
* Verifica si una aplicación ya está activa
* USO: ? IsActive("Nombre del ejecutable.exe")
*--------------------------------------------------------
FUNCTION IsActive(tcCaption)
DECLARE INTEGER FindWindow IN WIN32API ;
STRING cNULL, ;
STRING cWinName
RETURN FindWindow(0, tcCaption) # 0
ENDFUNC

*--------------------------------------------------------
* FUNCTION YaActiva()
*--------------------------------------------------------
* Comprueba que la aplicación no se esta ejecutando
* Invoca a IsActive() descripta anteriormente
*--------------------------------------------------------
FUNCTION YaActiva()
*LOCAL llRet, lcCaption
PUBLIC llret, lcCaption
llret = .F.
lcCaption = _SCREEN.CAPTION
*--- Renombra temporariamente el caption de la app
_SCREEN.CAPTION = "_" + lcCaption
IF IsActive(lcCaption)
*--- Si ya esta activo
MESSAGEBOX("ATENCION ESTE PROGRAMA YA ESTA ABIERTO, NO PUEDE ABRIRLO NUEVAMENTE, CIERRE LA APLICACION",16," PROGRAMA YA ABIERTO" )
llret = .T.
ENDIF
_SCREEN.CAPTION = lcCaption
RETURN llret
ENDFUNC

******************************************************