bool CTotalUpdateDlg::GetProcessModule(DWORD dwPID,CString sProcessName)
{
HANDLE hModuleSnap = NULL;
MODULEENTRY32 me32 = {0};
hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
if (hModuleSnap == (HANDLE)-1)
return (FALSE);
me32.dwSize = sizeof(MODULEENTRY32);
//해당프로세스의모듈리스트를루프로돌려서프로세스이름과동일하면
//true를리턴한다.
if(Module32First(hModuleSnap, &me32))
{
do
{
//printf("process name : %s\n", me32.szModule);
if(me32.szModule == sProcessName)
{
CloseHandle (hModuleSnap);
return true;
}
}
while(Module32Next(hModuleSnap, &me32));
}
CloseHandle (hModuleSnap);
return false;
}
bool CTotalUpdateDlg::ProcessKill( CString strProcessName )
{
HANDLE hProcessSnap = NULL;
BOOL bRet = FALSE;
PROCESSENTRY32 pe32 = {0};
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == (HANDLE)-1)
return false;
pe32.dwSize = sizeof(PROCESSENTRY32);
//프로세스가메모리상에있으면첫번째프로세스를얻는다
if (Process32First(hProcessSnap, &pe32))
{
BOOL bCurrent = FALSE;
MODULEENTRY32 me32 = {0};
do
{
bCurrent = GetProcessModule(pe32.th32ProcessID,strProcessName);
if(bCurrent)
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
if(hProcess)
{
if(TerminateProcess(hProcess, 0))
{
unsigned long nCode; //프로세스종료상태
GetExitCodeProcess(hProcess, &nCode);
}
//printf("process exit\n");
CloseHandle(hProcess);
return true;
}
}
}
while (Process32Next(hProcessSnap, &pe32)); //다음프로세스의정보를구하여있으면루프를돈다.
}
CloseHandle (hProcessSnap);
return true;
}