Windows

Windows Application FindProcessId C/C++ Code

bitcoder 2022. 2. 25. 21:17
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 버전의 실행파일도 포함되어 있습니다.

FindProcessId.zip
0.01MB

프로젝트 설정에서 특이사항은 다음과 같습니다.

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