C/Visual C - Kill a process

 
Vista:

Kill a process

Publicado por magiccc3 (2 intervenciones) el 04/09/2001 08:14:58
Quisiera saber que funcion es la que me da el handle de un proceso del cual solo conozco el nombre. Digamos por ejemplo que quisiera eliminar el proceso del SysTray o cualquier otro proceso que aparece en el Administrador de Tareas y que no tiene una ventana asociada.

Gracias.
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
Imágen de perfil de Alejandro

Obtener el handle de un proceso por nombre

Publicado por Alejandro (913 intervenciones) el 11/10/2024 23:33:40
Magiccc3, para obtener el handle de un proceso en Windows cuando solo conoces su nombre, puedes utilizar la API de Windows. A continuación, te muestro cómo hacerlo paso a paso.

1. Incluir las bibliotecas necesarias



Asegúrate de incluir las siguientes bibliotecas en tu código:

1
2
3
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>

2. Función para obtener el handle del proceso



Puedes usar la siguiente función para buscar un proceso por su nombre y devolver su handle:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
HANDLE ObtenerHandleProcesoPorNombre(const char *nombreProceso) {
    HANDLE hProceso = NULL;
    PROCESSENTRY32 proceso;
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
 
    if (hSnapshot == INVALID_HANDLE_VALUE) {
        return NULL; // Error al crear el snapshot
    }
 
    proceso.dwSize = sizeof(PROCESSENTRY32);
 
    if (Process32First(hSnapshot, &proceso)) {
        do {
            if (strcmp(proceso.szExeFile, nombreProceso) == 0) {
                hProceso = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proceso.th32ProcessID);
                break; // Salir del bucle si encontramos el proceso
            }
        } while (Process32Next(hSnapshot, &proceso));
    }
 
    CloseHandle(hSnapshot);
    return hProceso; // Retorna el handle del proceso o NULL si no se encontró
}

3. Ejemplo de uso



Aquí tienes un ejemplo de cómo usar la función para eliminar un proceso, como el `SysTray`:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main() {
    const char *nombreProceso = "systray.exe"; // Cambia esto por el nombre del proceso que deseas eliminar
    HANDLE hProceso = ObtenerHandleProcesoPorNombre(nombreProceso);
 
    if (hProceso != NULL) {
        // Terminar el proceso
        TerminateProcess(hProceso, 0);
        CloseHandle(hProceso);
        printf("Proceso %s terminado.\n", nombreProceso);
    } else {
        printf("Proceso %s no encontrado.\n", nombreProceso);
    }
 
    return 0;
}

Consideraciones



- Permisos: Asegúrate de que tu aplicación tenga los permisos necesarios para terminar procesos. Si no tienes los permisos adecuados, `OpenProcess` puede fallar.
- Precaución: Terminar procesos puede causar pérdida de datos o inestabilidad en el sistema. Asegúrate de que es seguro hacerlo.
- Nombre del proceso: Asegúrate de que el nombre del proceso que estás buscando sea correcto y esté en el formato adecuado (incluyendo la extensión `.exe`).
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