Ciao ragazzi, io per terminare processi in C++ uso il seguente metodo:
incude, spero di non essermene dimenticato qualcuno
codice:
#include <windows.h>
#include <string>
#include <sstream>
#include <tlhelp32.h>
#include <psapi.h>
"Sniffa" i processi correnti.
codice:
BOOL SniffProcess(char * ProcessToSniff)
{
DWORD PiDProcess;
HANDLE hProcess = NULL;
PROCESSENTRY32 nProcess = {0};
PPROCESS_MEMORY_COUNTERS mProcess;
DWORD dProcess;
string s_NomeProcesso;
string s_ProcessToSniff;
s_ProcessToSniff.assign(ProcessToSniff);
hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hProcess != INVALID_HANDLE_VALUE)
{
nProcess.dwSize = sizeof(PROCESSENTRY32);
while(Process32Next(hProcess, &nProcess))
{
PiDProcess = nProcess.th32ProcessID;
s_NomeProcesso.assign(nProcess.szExeFile);
s_NomeProcesso = KillCapital(s_NomeProcesso);
s_ProcessToSniff = KillCapital(s_ProcessToSniff);
if(s_NomeProcesso == s_ProcessToSniff){
//if(MessageBox(NULL,s_NomeProcesso.c_str(),"Terminare?",MB_ICONQUESTION|MB_YESNO) == IDYES)
KillProcess(PiDProcess, DELETE); return TRUE;}
}
}
return FALSE;
}
questa funzione riduce a minuscoli i caratteri della stringa del nome del processo da terminare e di quello sniffato, in modo che se chiamo
SniffProcess(Firefox.exe); e il processo è firefox.exe me lo termina comunque
codice:
string KillCapital(string str)
{
for(int x = 0; x <= str.size()-1; x++)
if((str.at(x) >= 'A') && (str.at(x) <= 'Z'))
str.at(x) += 32;
return str;
}
infine il DISTRUTTURE di processi
codice:
BOOL KillProcess(DWORD dwProcessId, UINT uExitCode)
{
DWORD dwDesiredAccess = PROCESS_TERMINATE;
BOOL bInheritHandle = FALSE;
HANDLE hProcess = OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId);
if (hProcess == NULL)
return FALSE;
BOOL result = TerminateProcess(hProcess, uExitCode);
CloseHandle(hProcess);
return result;
}
Ecco questo è il mio problema: se per esempio voglio terminare il processo di un'applicazione (poichè per svolgere ruoli sepecifici preferisco eseguire dei processi invece di creare tread (non sono ancora capace e penso che non sia ancora giunto il momento di imparare) ) e l'applicazione da terminare è stata rinominata es. da Firefox.exe a ciao.exe, avete qualche consiglio per terminare il processo? forse controllare la memoria che occupano, anche se sarebbe meglio analizzare il contenuto.... grazie in anticipo