Traducción de una entrada del blog del ruso Sergey Berezniker que nos muestra dos métodos para terminar una aplicación que se está ejecutando
Entrada Original: CHECK IF EXE IS running AND optionally TERMINATE it
La primera opción es utilizando Scripts de WMI:
lcExeName = "notepad.exe"
* Se esta ejecutando el EXE
? IsExeRunning(lcExeName)
* Cierra el EXE si se esta ejecutando
? IsExeRunning(lcExeName, .T.)
RETURN
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
ENDFUNC
La otra opción es mediante API:
#DEFINE WM_CLOSE 0x10 DECLARE LONG FindWindow IN WIN32API STRING ClassName, STRING WindowTitle DECLARE LONG SendMessage IN WIN32API LONG HWND, LONG Msg, LONG wParam, LONG LPARAM lcWindowTitle = "Sin título - Bloc de notas" HWND = FindWindow( NULL, lcWindowTitle ) IF HWND = 0 ? "Ventana no encontrada" RETURN ENDIF =SendMessage( HWND, WM_CLOSE, 0, 0 ) RETURN
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.