terminar segundo pudo programa procesos proceso plano matar eliminar desde denegado cerrar acceso c winapi api

segundo - ¿Cómo matar procesos por nombre?(Win32 API)



terminar proceso cmd (2)

Me encontré con un problema similar. Esto es lo que se me ocurrió ...

void myClass::killProcess() { const int maxProcIds = 1024; DWORD procList[maxProcIds]; DWORD procCount; char* exeName = "ExeName.exe"; char processName[MAX_PATH]; // get the process by name if (!EnumProcesses(procList, sizeof(procList), &procCount)) return; // convert from bytes to processes procCount = procCount / sizeof(DWORD); // loop through all processes for (DWORD procIdx=0; procIdx<procCount; procIdx++) { // get a handle to the process HANDLE procHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procList[procIdx]); // get the process name GetProcessImageFileName(procHandle, processName, sizeof(processName)); // terminate all pocesses that contain the name if (strstr(processName, exeName)) TerminateProcess(procHandle, 0); CloseHandle(procHandle); } }

Básicamente, tengo un programa que se lanzará más de una vez. Entonces, habrá dos o más procesos lanzados del programa.

Quiero usar la API de Win32 y matar / terminar todos los procesos con un nombre específico.

He visto ejemplos de matar a un proceso, pero no múltiples procesos con el mismo nombre (pero con diferentes parámetros).


Pruebe el código siguiente, killProcessByName() matará cualquier proceso con nombre nombre de filename :

#include <windows.h> #include <process.h> #include <Tlhelp32.h> #include <winbase.h> #include <string.h> void killProcessByName(const char *filename) { HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL); PROCESSENTRY32 pEntry; pEntry.dwSize = sizeof (pEntry); BOOL hRes = Process32First(hSnapShot, &pEntry); while (hRes) { if (strcmp(pEntry.szExeFile, filename) == 0) { HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, 0, (DWORD) pEntry.th32ProcessID); if (hProcess != NULL) { TerminateProcess(hProcess, 9); CloseHandle(hProcess); } } hRes = Process32Next(hSnapShot, &pEntry); } CloseHandle(hSnapShot); } int main() { killProcessByName("notepad++.exe"); return 0; }

Nota: El código distingue entre mayúsculas y minúsculas al filename del filename , puede editarlo para mayúsculas y minúsculas.