FoxPro/Visual FoxPro - Correr el programa una sola instancia

   
Vista:

Correr el programa una sola instancia

Publicado por kong (681 intervenciones) el 25/07/2008 12:27:06
Hola Foxeros, tengo una pregunta.
Que tan viable es utilizar el siguiente codigo para limitar la ejecucion del programa una sola vez (una sola instancia por pc)?.......Esto lo pongo en el inicio de toda la aplicacion.

IF FCREATE("corriendo.txt")<0
MESSAGEBOX("C U I D A D O !"+CHR(13)+CHR(13)+;
"USTED ESTA INTENTANTO EJECUTAR"+CHR(13)+;
"OTRA INSTANCIA DEL MISMO SISTEMA"+CHR(13)+;
"(Esta instancia se cerrara automaticamente)",(0+48),;
"DOBLE INICIO DEL SISTEMA")
RELEASE WINDOWS
QUIT
ENDIF
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

RE:Correr el programa una sola instancia

Publicado por alexcoinc (449 intervenciones) el 25/07/2008 14:55:42
Tambien:

IF F_ActivaWin("TITULO DE LA VENTA PRINCIPAL.")
messagebox("Programa en ejecución"+chr(13)+chr(13)+;
"Verifique que no este minimizado",48,'Cuidado')
close all
set sysmenu to default
clear events
quit
ENDIF

Lo anterior en el programa principal.
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

RE:Correr el programa una sola instancia

Publicado por Hector R. De los Santos (270 intervenciones) el 25/07/2008 15:43:20
Implementa esto:

Crea un prg con esta funcion (CheckRunning.prg)

* Inicio
FUNCTION IsExeRunning(tcName, tlTerminate)
LOCAL loLocator, loWMI, loProcesses, loProcess, llIsRunning
loLocator = CREATEOBJECT('WBEMScripting.SWBEMLocator')
loWMI = loLocator.ConnectServer()
loWMI.Security_.ImpersonationLevel = 3 && Impersonate

loProcesses = loWMI.ExecQuery([SELECT * FROM Win32_Process WHERE Name = '] + tcName + ['])
llIsRunning = .F.
IF loProcesses.Count > 0
FOR EACH loProcess in loProcesses
llIsRunning = .T.
IF tlTerminate
loProcess.Terminate(0)
ENDIF
ENDFOR
ENDIF
RETURN llIsRunning
*Fin

Uso:

SET PROCEDURE TO CheckRunning.prg
?IsExerunning("tuejecutable.exe")

Si esta corriendo retorna .T. de lo contrario retorna .F.

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

Alexcoinc, te falto la funcion

Publicado por enrique (1041 intervenciones) el 25/07/2008 15:55:42
Esta funncion va con la respuesta de alexcoinc
*-----------------------------
FUNCTION F_ActivaWin(cCaption)
*-----------------------------

LOCAL nHWD
DECLARE INTEGER FindWindow IN WIN32API ;
STRING cNULL, ;
STRING cWinName

DECLARE SetForegroundWindow IN WIN32API ;
INTEGER nHandle

DECLARE SetActiveWindow IN WIN32API ;
INTEGER nHandle

DECLARE ShowWindow IN WIN32API ;
INTEGER nHandle, ;
INTEGER nState

nHWD = FindWindow(0, cCaption)
IF nHWD > 0
* VENTANA YA ACTIVA
RETURN .T.
ELSE
* VENTANA NO ACTIVA
RETURN .F.
ENDIF
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

RE:Alexcoinc, te falto la funcion

Publicado por kong (681 intervenciones) el 25/07/2008 19:24:39
mil Gracias a los tres.
.....En la funcion de Enrrique, que pasaria si no se escribe bien o no se sabe el caption de la ventana?
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

RE:Alexcoinc, te falto la funcion

Publicado por enrique (1041 intervenciones) el 25/07/2008 22:01:25
No puede reconocer la ventana, por lo tanto no funcionaria
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

RE:Alexcoinc, te falto la funcion

Publicado por alexcoinc (449 intervenciones) el 25/07/2008 23:47:32
Soy alexcoinc y es cierot que pena tan grande me habia faltado lo mas importante... LA FUNCION... es cierto otra vez que pena.. Gracias Enrique. !!

Bueno lo iumportantre es que a Kong se le pudo colaborar con la ayuda de Enrique... Gracias otra vez..

Ahora Yo podría decir que no s eme olvido.. siono que ewra para saber si estaban poniendo cuidado !!! Jeje .. Es un mal chiste.

Gracias OTra vez y tratare de no volver a fallar Ok.
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