{
BOOL bRetVal = TRUE;
//HANDLE hPID;
HANDLE h_pro;
HANDLE h_sna;
PROCESSENTRY32 pe_sen = {0};
bool lpFound = false;
int result;
CString csMsg;
CString cMethod = L"KillAProcess";
h_sna = CreateToolhelp32Snapshot(
//A snapshot tries to reserve 1MB of virtual memory. If it can't, or can't
//commit the first page (or n pages), then you'll get ERROR_NOT_ENOUGH_MEMORY
//and very important, to add the TH32CS_SNAPNOHEAPS, to limit the ammount of
//data the snapshot generates
if ((HANDLE) -1 == h_sna)
{
DWORD lngResult = GetLastError();
CString csError;
csError.Format(L"
AfxMessageBox(csError);
}
pe_sen.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(h_sna, &pe_sen))
{
do
{
h_pro = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pe_sen.th32ProcessID);
CloseHandle (h_pro);
//AfxMessageBox(pe_sen.
if (pe_sen.th32ProcessID != 0)
{
result = _tcscmp(pe_sen.szExeFile,
if(result==0)
{
//hPID = (HANDLE)pe_sen.th32ProcessID;
lpFound = true;
//start kill
HANDLE hProcess = NULL;
hProcess = ::OpenProcess(PROCESS_
//********************
//NOTE!!!!Have to have this Openprocess before TerminateProcess call to make it work.
//************************
if (hProcess != NULL)
{
if (::TerminateProcess(hProcess, 0))
{
csMsg.Format(L"%s: killed %s", cMethod, csName);
AfxMessageBox(csMsg);
}
else
{
csMsg.Format(L"%s: error terminating %s [0x%08x]", cMethod,
csName, GetLastError());
AfxMessageBox(csMsg);
}
}
if (hProcess != NULL)
{
::CloseHandle(hProcess);
hProcess = NULL;
}
break;
}
}
} while (Process32Next(h_sna, &pe_sen));
}else
AfxMessageBox(L"Process32First failed");
return bRetVal;
}
No comments:
Post a Comment