|
현재 실행중인 여러개의 프로세스를 찾아서 그 상태를 나타내고자 하는 프로그램을 작성하였습니다.
프로세스를 찾는 것은 볼란도에 게시판에 있는 내용을 참고 하였습니다.
프로세스를 1개씩 찾아서 상태를 “실행”, “TimoOut”, “정지”로 나타냅니다.
반복하여 5개까지는 문제 없이 찾는데…6번째의 프로세스를 찾고 난후 다음의 프로세트를 찾는 동작해서 에러가 발생합니다.
급하니 꼭 알려주세요.
소스 올립니다.
do {
HANDLE hProcess;
// Get the actual priority class.
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
dwPriorityClass = GetPriorityClass (hProcess);
AnsiString Temp = pe32.szExeFile;
monaProgCondxDt = &m_stProgCondxDt[ 0 ];
for(int idx = 0 ; idx < MONASVR_PROG_CNT; idx++, monaProgCondxDt++) {
if(Temp == monaProgCondxDt->pszExeName) {
monaProgCondxDt->fAlive = true;
fRet = true;
break;
} else {
fRet = false;
}
}
if(fRet == true){
typedef BOOL (*TIsHungAppWindow)(HWND);
TIsHungAppWindow func;
HWND hUser32=GetModuleHandleA("user32.dll");
func=(TIsHungAppWindow)GetProcAddress(hUser32,"IsHungAppWindow");
if(func(this->Handle)){
monaProgCondxDt->Error = true;
Msg.sprintf("%s Process TimeOut", Temp);
} else {
monaProgCondxDt->Error = false;
Msg.sprintf("%s Process Running", Temp);
}
Memo->Lines->Add(Msg);
CloseHandle (hProcess);
}
} while (Process32Next(hProcessSnap, &pe32));
Return = TRUE;
}
CloseHandle (hProcessSnap);
|