Trucos Cancelar un proceso (kill)

MKB-551101

Para poder cerrar un proceso hay que seguir los siguientes pasos:

1. Obtener el identificador del proceso.

2. Abrir el proceso a partir de su identificador. Para ello, hay que utilizar la función OpenProcess:

Private Declare Function OpenProcess Lib "kernel32" (ByVal _
dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal _
dwProcessId As Long) As Long

3. Comprobar el estado del proceso con la función GetExitCodeProcess para comprobar que está activo:

Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal _
hProcess As Long, lpExitCode As Long) As Long

4. Si el proceso está activo hay que cerrarlo con la función TerminateProcess:

Private Declare Function TerminateProcess Lib "kernel32" (ByVal _
hProcess As Long, ByVal uExitCode As Long) As Long

5. Por último, si el proceso se cerró correctamente hay que liberar su manejador asociado con CloseHandle:

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject _
As Long) As Long

A continuación, se muestra un ejemplo en Visual Basic que implementa el kill -9. Siga los siguientes pasos para probar el código:

1. Cree un nuevo proyecto con un formulario.
2. Añada un botón y una caja de texto con las siguientes propiedades:

Command1
Name: btnCerrar
Caption: &Matar Proceso

Text1
Name: txtIdProceso
Text: ""

3. Copie o pegue el siguiente código en el formulario:

Private Declare Function OpenProcess Lib "kernel32" (ByVal _
dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" _
(ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject _
As Long) As Long

Const PROCESS_TERMINATE = &H1
Const PROCESS_QUERY_INFORMATION = &H400
Const STILL_ACTIVE = &H103

Private Sub btnCerrar_Click()
Dim hProceso As Long
Dim lEstado As Long

' Obtenemos el handle al proceso
hProceso = OpenProcess(PROCESS_TERMINATE Or _
PROCESS_QUERY_INFORMATION, 0, CLng(txtIdProceso))

If hProceso <> 0 Then
  ' Comprobamos estado del proceso
  GetExitCodeProcess hProceso, lEstado
  If lEstado = STILL_ACTIVE Then
    ' Cerramos el proceso
    If TerminateProcess(hProceso, 9) <> 0 Then
      MsgBox "Proceso cerrado"
    Else
      MsgBox "No se pudo matar el proceso"
    End If
  End If
  ' Cerramos el handle asociado al proceso
  CloseHandle hProceso
Else
  MsgBox "No se pudo tener acceso al proceso"
End If
End Sub



Trucos Trucos

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com