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 ****************************************************** |