通过进程名查找进程ID

这里我利用工具帮助(Tool helper)这类API来实现根据进程名查找进程ID。Tool helper API由头文件TlHelp32.h定义。

们实现这个功能需要用到的API有CreateToolhelp32Snapshot、Process32First、Process32Next。之外我们还需用

到的一个结构体是PROCESSENTRY32,这个结构体中保存了进程的相关信息,其中就有进程名和进程ID。我们可以

像上一篇通过文件句柄获得文件路径中那样,通过CreateToolhelp32Snapshot、Process32First、Process32Next来

遍历所有的进程,并用PROCESSENTRY32保存相关信息,通过匹配进程名来查找ID。

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <TlHelp32.h>

BOOL GetProcessIdByName(LPSTR szProcessname, LPDWORD lpPID)
{
	PROCESSENTRY32 ps;
	HANDLE hSnapshot;

	ZeroMemory(&ps, sizeof(PROCESSENTRY32));
	ps.dwSize = sizeof(PROCESSENTRY32);

	hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if (hSnapshot == INVALID_HANDLE_VALUE)
	{
		return FALSE;
	}

	if (!Process32First(hSnapshot, &ps))
	{
		return FALSE;
	}
	do 
	{
		if (lstrcmpi(ps.szExeFile, szProcessname) == 0)
		{
			*lpPID = ps.th32ProcessID;
			CloseHandle(hSnapshot);
			return TRUE;
		}
	} while (Process32Next(hSnapshot, &ps));

	CloseHandle(hSnapshot);
	return FALSE;
}

int main()
{
	TCHAR szProcessName[MAX_PATH];
	DWORD dwPID;

	while (scanf("%s", szProcessName))
	{
		GetProcessIdByName(szProcessName, &dwPID);
		printf("The id of the process %s is %d\n", szProcessName, dwPID);
	}

	return 0;
}

下面是我的测试截图

通过进程名查找进程ID_第1张图片


当然,如果我们还想要获得进程句柄,只要调用OpenProcess即可。


你可能感兴趣的:(通过进程名查找进程ID)