반응형
■ 실행중인 프로세스 찾기 (CreateToolhelp32Snapshot)
#include "tlhelp32.h" // for CreateToolhelp32Snapshot
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 processEntry32;
processEntry32.dwSize = sizeof(PROCESSENTRY32);
if (!Process32First(hProcessSnap, &processEntry32))
CloseHandle(hProcessSnap);
CString sProcessName = _T("notepad.exe"); // 메모장 찾기
while (Process32Next(hProcessSnap, &processEntry32))
{
if (sProcessName.Compare(processEntry32.szExeFile) == 0)
{
// 일치하는 프로세스 존재
}
}
■ 실행중인 프로세스 찾기, 종료시키기 (EnumProcesses)
#include "psapi.h" // for EnumProcesses
DWORD aProcesses[1024], cbNeeded;
if (EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded)) // 프로세스 검색
{
const int nItemCount = cbNeeded / sizeof(DWORD);
TCHAR szProcessName[MAX_PATH];
for (int i = 0; i < nItemCount; i++)
{
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i]);
if (!hProcess) continue;
HMODULE hMod;
DWORD cbNeeded;
if (!EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded)) // 모듈에 대한 핸들 검색
{
CloseHandle(hProcess);
continue;
}
GetModuleBaseName(hProcess, hMod, szProcessName, sizeof(szProcessName) / sizeof(TCHAR));
CString sProcessName = _T("notepad.exe"); // 메모장 찾기
if (sProcessName.CompareNoCase(szProcessName) == 0) // 일치하는 프로세스 찾기
TerminateProcess(hProcess, 0); // 프로세스 종료
CloseHandle(hProcess);
}
}
※ 속도는 CreateToolhelp32Snapshot으로 하는게 더 빠르니 단순히 프로세스를 찾기만 할때는 첫번째 방식으로 사용하는게 좋아보입니다.
반응형
'C++, MFC' 카테고리의 다른 글
[C++/MFC] 텍스트 파일의 인코딩 확인하는 방법 (0) | 2022.09.16 |
---|---|
[MFC] 재배포 패키지 없이 프로그램 배포하는 방법 (0) | 2022.08.29 |
[C++/MFC] rand()함수를 이용하여 로또 번호 생성해보기 (0) | 2022.08.28 |
[C / C++] 난수, 랜덤 숫자 구하기 rand() (0) | 2022.08.19 |
[C++ / MFC] 레지스트리 값 저장, 불러오기 (RegCreateKeyEx) (0) | 2022.08.06 |
댓글