Cerrar proceso usando el título de la ventana principal de la aplicación

Código para cerrar un proceso utilizando el título de la ventana principal del programa. Muy útil en casos que se desee cerrar aplicaciones desde nuestro programa.

Crear un módulo y pegue el siguiente código:


Option Explicit

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

Private Declare Function GetWindowThreadProcessId Lib "user32" _
   (ByVal hwnd As Long, lpdwProcessId As Long) As Long

Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As Long

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

Public Sub CerrarProceso(TítuloVentana As String)
Dim hProceso As Long
Dim lEstado As Long
Dim idProc As Long
Dim winHwnd As Long

winHwnd = FindWindow(vbNullString, TítuloVentana)
If winHwnd = 0 Then
    Debug.Print "El proceso no está abierto": Exit Sub
End If
Call GetWindowThreadProcessId(winHwnd, idProc)

' Obtenemos el handle al proceso
hProceso = OpenProcess(PROCESS_TERMINATE Or _
PROCESS_QUERY_INFORMATION, 0, idProc)
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
            Debug.Print "Proceso cerrado"
        Else
            Debug.Print "No se pudo matar el proceso"
        End If
    End If
    ' Cerramos el handle asociado al proceso
    CloseHandle hProceso
Else
    Debug.Print "No se pudo tener acceso al proceso"
End If
End Sub

Por ejemplo, si desea cerrar la calculadora de Windows, llame a la función así: CerrarProceso(“Calculadora”). Donde “Calculadora” es el título de la ventana del programa que desea cerrar.

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *