我们知道,要访问别的进程,需要获得它的进程PID,那么我们如何在程序中来实现这一功能呢?我们需要用到的是Windows中的进程快照功能:
BOOL GET_PROCESSPID_BY_NAME (WCHAR*ProcessName,HANDLE*ProcessPID)
{
BOOL FLAG = FALSE;
HANDLE ToolHelp32Handle = INVALID_HANDLE_VALUE;
PROCESSENTRY32 ProcessEntry32 = {0};
//一个结构体,相当于照相机的胶卷,用于存放快照的影像
ProcessEntry32.dwSize = sizeof(PROCESSENTRY32);
//这个结构体的大小是自己的大小
ToolHelp32Handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
do
{
if(_memicmp(ProcessEntry32.szExeFile,ProcessImageName,
wcslen(ProcessImageName)*sizeof(WCHAR))==0)
//比较影像和目标文件名 ,当完全相同时
{
*ProcessPID = (HANDLE)ProcessEntry32.th32ProcesspID; //将进程ID赋值
FLAG = TRUE;
break;
}
} while (Process32Next(ToolHelp32Handle, &ProcessEntry32));
if (ToolHelp32Handle!=INVALID_HANDLE_VALUE)
{
CloseHandle(ToolHelp32Handle);
}
return FLAG;
}
如此,便可以查看其他进程的ID了。
当然,我们在实际编写程序的过程中,要严格注意异常的处理,尤其是在本程序中,ID的数据类型,各种可能出现的情况都需要注意。本篇文章只是为了简单介绍进程快照的功能,因此在这里不多加赘述,读者在编写代码时可以自行编写异常的处理机制。