FoxPro/Visual FoxPro - ejecutable ya abierto

   
Vista:

ejecutable ya abierto

Publicado por Alejandro amssys@amssys.com.ar (58 intervenciones) el 02/04/2015 17:15:34
Buenos dias, como hago para informar al usuario , que ya tiene el ejecutable abierto , cuando lo quiere abrir de vuelta.
Gracias
Saludos
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

ejecutable ya abierto

Publicado por Saul (676 intervenciones) el 02/04/2015 20:37:50
Te dejo este ejemplo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
* Y ESTA ES LA FUNCION QUE LO HACE TODO:
*-----------------------------
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
		* LA "LLAMAMOS":
		ShowWindow(nHWD,9)
 
		* LA PONEMOS ENCIMA
		SetForegroundWindow(nHWD)
 
		* LA ACTIVAMOS
		SetActiveWindow(nHWD)
		RETURN .T.
	ELSE
		* VENTANA NO ACTIVA
		RETURN .F.
	ENDIF
RETURN
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

ejecutable ya abierto

Publicado por Alejandro (58 intervenciones) el 02/04/2015 20:41:44
muchas gracias , ahora lo voy a probar
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

ejecutable ya abierto

Publicado por Alejandro (58 intervenciones) el 05/04/2015 18:54:52
SAUL, DONDE PONGO ESTA FUNCION , EN EL MAIN DEL PROGRAMA ?
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

ejecutable ya abierto

Publicado por Ernesto Hernandez (4632 intervenciones) el 06/04/2015 19:36:57
prueba esta funcion te sirve tanto como para un ejecutable como para una forma

SUERTE !!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
******************************************
* FUNCTION IS_RUN(tcprograma)
* 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

ejecutable ya abierto

Publicado por Alejandro amssys@amssys.com.ar (58 intervenciones) el 09/04/2015 22:54:53
hola ernesto , cambio donde decia tcprograma , por el nombre del mio , en todos los lados y no me funciona , porque sera ?
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