FoxPro/Visual FoxPro - No dejar de ejecutar 2 veces un ejecutable

   
Vista:

No dejar de ejecutar 2 veces un ejecutable

Publicado por Juan (71 intervenciones) el 19/08/2013 12:33:06
Buenos días, alguien sabe alguna función para que no me deje abrir dos veces un mismo ejecutable?.

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

No dejar de ejecutar 2 veces un ejecutable

Publicado por neo (1601 intervenciones) el 21/08/2013 03:30:54
Este es un ejemplo del Profr Luis Ma Guayan

Verificar si la aplicación está activa

Podemos saber si una aplicación está activa, para ello tenemos la función de la API:

Busca la ventana activa......: FindWindows

A esta función se le debe pasar como parámetro, el título (caption) de la aplicación. Este parámetro debe ser exactamente igual al título de la ventana de la aplicación que queremos verificar:

1
2
3
4
5
6
7
8
9
10
11
12
13
*----------------------------------------
* FUNCTION IsActive(tcCaption)
*----------------------------------------
* Verifica si una aplicación ya está activa
* USO: ? IsActive("Calculadora")
*----------------------------------------
FUNCTION IsActive(tcCaption)
DECLARE INTEGER FindWindow IN WIN32API ;
STRING cNULL, ;
STRING cWinName
RETURN FindWindow(0, tcCaption) # 0
ENDFUNC
*----------------------------------------


Con esta función podemos comprobar si nuestra aplicación de Visual FoxPro ya ha sido iniciada en una PC y así no iniciarla nuevamente. Para lograrlo escribiremos una función que se invoca en el inicio de nuestra aplicación, luego de haber colocado el título a nuestra ventana principal.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
*----------------------------------------
* FUNCTION YaActiva()
*----------------------------------------
* Comprueba que la aplicación no se esta ejecutando
* Invoca a IsActive() descripta anteriormente
*----------------------------------------
FUNCTION YaActiva()
LOCAL 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("Este sistema ya está activo",16,"Aviso")
llRet = .T.
ENDIF
_SCREEN.Caption = lcCaption
RETURN llRet
ENDFUNC
*----------------------------------------


Si la función YaActiva() retorna .T., entonces ya hay una instancia de la aplicación activa, y debemos cancelar la nueva ejecución.




&& Este es del buen amigo kong

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
FUNCTION F_INSTANCIAR && PARA COMPROBAR SI YA SE ESTA CORRIENDO EL PROGRAMA
* pubnRutina=2
PUBLIC nHdlCorriendo
nHdlCorriendo=FCREATE("D:\corriendo.txt")
salir=0
IF nHdlCorriendo<0
SET SYSMENU OFF
_SCREEN.WindowStatE= 2
MESSAGEBOX("C U I D A D O !"+CHR(13)+CHR(13)+;
"USTED HA INTENTANDO EJECUTAR OTRA INSTANCIA DEL MISMO SISTEMA"+CHR(13)+;
"(Esta instancia se cerrara automaticamente)",(0+48),;
"DOBLE INICIO DEL SISTEMA",10000)
RELEASE WINDOWS
QUIT
salir=1
ENDIF
RETURN salir

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

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar