通过目标程序名字获取进程PID

我们知道,要访问别的进程,需要获得它的进程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的数据类型,各种可能出现的情况都需要注意。本篇文章只是为了简单介绍进程快照的功能,因此在这里不多加赘述,读者在编写代码时可以自行编写异常的处理机制。

猜你喜欢

转载自blog.csdn.net/tenderisthenoche/article/details/78639792