직대딩 블로그
[MFC] 원하는 프로세스 찾아서 종료시키는 소스코드 본문
Window 프로그래밍을 하다 보면 프로그램이 제대로 종료되지 않아 프로세스에 남아있거나 하는 경우가 있습니다.그럴 때는 강제로 프로세스를 종료시켜야 하는데, 문제가 생길 여지가 있습니다.이러한 과정을 해결하는 소스코드입니다.
순차적으로 동작중인 프로세스를 조회하며, 원하는 프로세스가 발견되면 강제 종료 시킵니다.
해당 소스코드는 CString을 제거하여 C++에서도 사용 가능합니다.
bool KillProcessByName(CString ImageName)
{
bool result;
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // 프로세스 정보 가져오기
if (hSnap == INVALID_HANDLE_VALUE)
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 PE32 = {0};
PE32.dwSize = sizeof(PROCESSENTRY32);
result = false;
if (Process32First(hSnap, &PE32)) // SnapShot에 들어 있는 첫번째 프로세스를 받아오기
{
sImageName.MakeUpper();
do
{
// 윈도우 2000 미만 처리
_tcsupr_s(PE32.szExeFile, MAX_PATH);
if (_tcsstr(PE32.szExeFile, sImageName) != NULL)
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PE32.th32ProcessID);
if (!hProcess)
{
hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, PE32.th32ProcessID);
}
if (hProcess)
{
if (PID == 0 || PE32.th32ProcessID == PID) // 프로세스 이름이 내가 원하는 어플리케이션인지 확인
{
TerminateProcess(hProcess, 0);
WaitForSingleObject(hProcess, 5000);
result = true;
}
CloseHandle(hProcess);
}
}
} while (Process32Next(hSnap, &PE32)); // 다음 프로세스 스냅샷에서 받아오기
CloseHandle(hSnap);
}
return result;
}'프로그래밍 > MFC' 카테고리의 다른 글
| [MFC] 윈도우 파일 탐색기의 폴더 구조를 구현하기 위한 함수 (0) | 2023.04.05 |
|---|---|
| [MFC] 문자열(str)을 URL 인코딩된 문자열로 변환 (0) | 2023.04.04 |
| [MFC] 비밀번호 변경 기능 구현 (0) | 2023.04.03 |
| [MFC] 레지스트리에서 프로그램 정보를 검색하는 소스코드 (0) | 2023.04.03 |
| [MFC] Windows 재부팅하는 소스코드 (0) | 2023.03.17 |
Comments