Cómo escribir un programa para cerrar el proceso en segundo plano en lenguaje C
BOOL KillProcessFromName(LPCSTR lpProcessName)
{
//crear una instantánea del proceso (TH32CS_SNAPPROCESS significa crear una instantánea de todos los procesos) p>
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
//Estructura para instantáneas del proceso PROCESSENTRY32
PROCESSENTRY32 pe;
//Creación de instancias de la operación de inicialización que se debe realizar antes de usar Process32First para obtener la primera instantánea del proceso después de la creación de instancias
pe.dwSize = sizeof(PROCESSENTRY32);
//El siguiente IF tiene el Mismo efecto:
//if(hProcessSnap == INVALID_ HANDLE_VALUE) identificador no válido
if(!Process32First(hSnapShot,&pe))
{
Devuelve FALSO;
}
CString strProcessName = hSnapShot,&pe))
{
//pe.szExeFile Obtener el nombre del archivo ejecutable del proceso actual
CString scTmp = pe.szExeFile;
/ Poner el nombre del archivo ejecutable en minúsculas con todos los caracteres alfabéticos
scTmp .MakeLower();
// Compara el nombre del archivo ejecutable del proceso actual con el nombre del archivo pasado
// Si son iguales, la comparación devuelve 0
if(!scTmp.MakeLower());
// Compara el nombre del archivo ejecutable del proceso actual con el nombre del archivo pasado
// If son iguales, la comparación devuelve 0 p>
if(!Compare(strProcessName))
{
//Obtiene el PID del proceso de la instantánea proceso (es decir, el PID en el Administrador de tareas) p>
DWORD dwProcessID = pe.th32ProcessID;
HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE,dwProcessID);
::TerminateProcess(hProcess,0);
CloseHandle(hProcess);
devuelve VERDADERO;
}
scTmp.ReleaseBuffer ();
}
strProc
essName.ReleaseBuffer();
return FALSE;
}
Tomando como ejemplo matar el programa qq, podemos realizar las siguientes operaciones:
KillProcessFromName("qq.exe");