오늘은 해당 프로그램이 실행중인지 확인하는 함수를 소개하고자 합니다.
보통 FindWindow 을 사용하면 되지만.. 부팅 시 자동실행이나 PC의 부하가 많은 상태에서는 FindWindow 로는 해당 window을 찾지 못하는 경우가 있습니다.
그래서 직접 작업관리자에서 해당 파일이 실행중인지 확인해서 해당 핸들을 얻는 방법이 가장 정확한 방법이기에 소개합니다.
보통 FindWindow 로 먼저 처리하고, 프로그램을 운영을 하면서 FindWindow 가 통과하는 경우가 발생하면 CreateToolhelp32Snapshot 울 이용을 하개 됩니다..
* 소스코드
// CString parm_exe : exe 파일명
// DWORD parm_id : 프로세스 아이디 (모르는 경우 -1 사용)
int Util::FindDoubleProcess(CString parm_exe, DWORD parm_id)
{
int ret_val = 0;
BOOL bGet = FALSE;
CString read_name;
CString parm_exe_lower = parm_exe;
HANDLE hSnapshot;
PROCESSENTRY32 ppe; //구성된 자료구조를 저장하기 위한 엔트리.
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//system 프로세서(pid=0)의 상태를 읽어 온다
ppe.dwSize = sizeof(PROCESSENTRY32); //엔트리 구조체 사이즈를 정해준다.
bGet = Process32First(hSnapshot, &ppe); //엔트리 중 자료를 가져온다.
parm_exe_lower.MakeLower();
while (bGet){
read_name = ppe.szExeFile;
read_name.MakeLower();
if( read_name == parm_exe && parm_id != ppe.th32ProcessID ){
int dd = ppe.th32ProcessID;
ret_val = 1; break;
}
bGet = Process32Next(hSnapshot, &ppe);
}
CloseHandle(hSnapshot);
return ret_val;
}
* 사용법
int ret = FindDoubleProcess("aaa.exe", -1);
위처럼 해당파일명이 존재하는지 찾게 됩니다.
대소문자를 구분하게 되어서 호출 시 소문자로 전달해야 정확히 찾게 됩니다.
참 쉽죠~~
#CreateToolhelp32Snapshot#상태#실행중#프로세스#프로세스가 실행중
'프로그램 > C++' 카테고리의 다른 글
해당위치에 파일 존재유무 체크 (0) | 2021.01.15 |
---|---|
바탕화면에 단축아이콘 만들기 (각종) (0) | 2021.01.15 |
강제로 프로세스 종료하기 (0) | 2021.01.15 |
Http Request 로 파일 다운로드 하기 (0) | 2021.01.14 |
현재 실행중인 폴더 위치 (0) | 2021.01.13 |