17 de febrero de 2016

Compruebe si EXE se está ejecutando y cierrelo

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.