728x90
프로세스이름으로 프로세스아이디를 찾는 방법입니다.
소스코드는 다음과 같습니다.
#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
// returns NULL if failed
unsigned long FindProcessId(const char* szProcessName)
{
HANDLE hProcessSnap = INVALID_HANDLE_VALUE;
PROCESSENTRY32 pe32;
unsigned long ulPID = NULL;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (INVALID_HANDLE_VALUE == hProcessSnap) {
printf("CreateToolhelp32Snapshot failed.\n");
return NULL;
}
pe32.dwSize = sizeof(PROCESSENTRY32);
if (false == Process32First(hProcessSnap, &pe32))
{
printf("Process32First failed.\n");
CloseHandle(hProcessSnap);
return NULL;
}
do
{
if (0 == _stricmp(szProcessName, pe32.szExeFile))
{
ulPID = pe32.th32ProcessID;
break;
}
} while (Process32Next(hProcessSnap, &pe32));
CloseHandle(hProcessSnap);
return ulPID;
}
int main(int argc, char** argv)
{
printf("%lu\n", FindProcessId("notepad.exe"));
return 0;
}
notepad.exe가 실행중인 상태에서의 실행결과는 다음과 같습니다.
C:\Users\Admin\source\repos\FindProcessId\Debug>FindProcessId.exe
28472
C:\Users\Admin\source\repos\FindProcessId\Debug>
notepad.exe가 실행중이 아니라면 notepad.exe 프로세스를 찾지 못하여 결과는 0입니다.
C:\Users\Admin\source\repos\FindProcessId\Debug>FindProcessId.exe
0
C:\Users\Admin\source\repos\FindProcessId\Debug>
프로젝트 소스파일을 첨부합니다. 컴파일한 Release 버전의 실행파일도 포함되어 있습니다.
프로젝트 설정에서 특이사항은 다음과 같습니다.
Project Property > Configuration Properties > Advanced Properties > Char Set > "Use Multi-Byte Character Set"
Multi-Byte Character Set을 사용하므로 PROCESSENTRY32W 타입이 아닌 PROCESSENTRY32 타입의 변수를 사용하였습니다.
728x90
'Windows' 카테고리의 다른 글
visual studio 2022 언어 설정 (0) | 2022.03.05 |
---|---|
관리자 권한으로 cmd창 실행하기 (0) | 2022.03.04 |
windows service install/uninstall (0) | 2022.03.04 |
GetLastError 문자열로 출력하기 (0) | 2022.02.25 |
배치스크립트 파일읽기 (0) | 2022.02.25 |