FoxPro/Visual FoxPro - Saber su un formulario se esta ejecutando

 
Vista:

Saber su un formulario se esta ejecutando

Publicado por jorge (45 intervenciones) el 14/07/2009 01:44:38
Hola amigos!!

Quisiera saber si algun modo de saber si un formulario se esta ejecutando.

Desde ya gracias
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:Saber su un formulario se esta ejecutando

Publicado por Mario (199 intervenciones) el 14/07/2009 15:26:46
Fijate la ayuda de la funcion Wexist
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
Imágen de perfil de Mauricio
Val: 471
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Saber su un formulario se esta ejecutando

Publicado por Mauricio (1541 intervenciones) el 14/07/2009 16:02:11
Espero que esto te sirva:
******************************************
Funcion: Is_Run
* Indica si un programa está en ejecución
* Parametros:
* tcprograma - Nombre del programa a comprobar
* Ejemplos:
* llret = Is_Run("GESTION.EXE")
* llret = Is_Run("GESTION")
* Retorno:
* .F. - El programa no está en ejecución
* .T. - El programa está en ejecución
* Notas:
* Si no se pone extensión, se asume EXE por defecto.
*
********************************************************************
* comprueba si consultamos el programa actual en ejecución
* y si se está corriendo solo una vez dice que no se esta ejecutando
* necesita VFP7 o superior
************************************************************
FUNCTION IS_RUN(tcprograma)

#DEFINE PROCESS_VM_READ 16
#DEFINE PROCESS_QUERY_INFORMATION 1024
#DEFINE DWORD 4

*--------------------------------------------------
* Declaración de Funciones API
*--------------------------------------------------
DECLARE INTEGER GetLastError IN kernel32
DECLARE INTEGER CloseHandle IN kernel32 INTEGER Handle
DECLARE INTEGER OpenProcess IN kernel32;
INTEGER dwDesiredAccessas, INTEGER bInheritHandle,;
INTEGER dwProcId
DECLARE INTEGER EnumProcesses IN psapi;
STRING @ lpidProcess, INTEGER cb,;
INTEGER @ cbNeeded
DECLARE INTEGER GetModuleBaseName IN psapi;
INTEGER hProcess, INTEGER hModule,;
STRING @ lpBaseName, INTEGER nSize
DECLARE INTEGER EnumProcessModules IN psapi;
INTEGER hProcess, STRING @ lphModule,;
INTEGER cb, INTEGER @ cbNeeded

LOCAL lcProcBuf, lnBufSize, lnProcessBufRet, lnProcNo, lnProcId,;
hProcess, lcModBuf, lnModBufRet, lcBasename, lcst, llret

LOCAL laprocesos(1,2), lcpbase

tcprograma = UPPER(tcprograma)
IF EMPTY(JUSTEXT(tcprograma))
tcprograma = tcprograma + ".EXE"
ENDIF

lnBufSize = 4096
lcProcBuf = Repli(Chr(0), lnBufSize)
lnProcessBufRet = 0

IF EnumProcesses (@lcProcBuf, lnBufSize, @lnProcessBufRet) = 0
? "Error code:", GetLastError()
RETURN
ENDIF

lcst = ""
FOR lnProcNo=1 TO lnProcessBufRet/DWORD
lnProcId = buf2dword(SUBSTR(lcProcBuf, (lnProcNo-1)*DWORD+1, DWORD))

hProcess = OpenProcess (PROCESS_QUERY_INFORMATION +;
PROCESS_VM_READ, 0, lnProcId)

IF hProcess > 0

lnBufSize = 4096
lcModBuf = Repli(Chr(0), lnBufSize)
lnModBufRet = 0

IF EnumProcessModules(hProcess,@lcModBuf,lnBufSize,@lnModBufRet) > 0

hModule = buf2dword(SUBSTR(lcModBuf,1, DWORD))

lcBasename = SPACE(250)
lnBufSize = GetModuleBaseName (hProcess, hModule,;
@lcBasename, Len(lcBasename))
lcBasename = UPPER(Left (lcBasename, lnBufSize))

lnpos = ASCAN(laprocesos,lcBasename,1,ALEN(laprocesos,1),1,8)

IF lnpos > 0
laprocesos(lnpos,2)=laprocesos(lnpos,2)+1
ELSE
laprocesos(ALEN(laprocesos,1),1)=lcBasename
laprocesos(ALEN(laprocesos,1),2)=1
DIMENSION laprocesos(ALEN(laprocesos,1)+1,2)
ENDIF

ENDIF
= CloseHandle (hProcess)
ENDIF
ENDFOR

DIMENSION laprocesos(ALEN(laprocesos,1)-1,2)
lnpos = ASCAN(laprocesos,tcprograma,1,ALEN(laprocesos,1),1,8)

IF lnpos>0
lcpbase = JUSTFNAME(SYS(16,0))
IF lcpbase=tcprograma
IF laprocesos(lnpos,2)>1
llret = .T.
ELSE
llret = .F.
ENDIF
ELSE
llret = .T.
ENDIF
ELSE
llret = .F.
ENDIF

RETURN llret
ENDFUNC

FUNCTION buf2dword (lcBuffer)
RETURN Asc(SUBSTR(lcBuffer, 1,1)) + ;
Asc(SUBSTR(lcBuffer, 2,1)) * 256 +;
Asc(SUBSTR(lcBuffer, 3,1)) * 65536 +;
Asc(SUBSTR(lcBuffer, 4,1)) * 16777216
ENDFUNC
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:Saber su un formulario se esta ejecutando

Publicado por Pablo (Argentina) (433 intervenciones) el 14/07/2009 16:03:48
Hola Amigo Jorge, aca va un ejemplo si utilizas un menu o un boton o lo que quieras usar.

if Wexist("miform")
=messagebox("Formulario ya esta en uso")
else
do form miform
endif

Ahora si tu problema es igual al mio y que estoy viendo como lo resuelvo que es como saber si un formulario se esta ejecutando pero para un proyecto que corre en RED. o sea si otro usuario ya esta usando ese form, que otro usuario no lo pueda utlizar. Si alguien sabe como hacer eso y me o nos puede ayudar fantastico.

Jorge, si tu problema es igual al mio, reformula la pregunta en las Notas y por ahi nos ayudan a los 2 y sino espero a haber sido de tu ayuda con el ejemplo

Suerte!!!!!!!!!!!

Pablo - Argentina
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:Saber su un formulario se esta ejecutando

Publicado por jorge (45 intervenciones) el 14/07/2009 17:32:20
Muchas gracias a todos por contestar
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