
在 Windows 下,如果要获取打开的某个前台窗口所对应的后台进程名,是没有现成的函数的。但是这并不是意味着我们不能利用微软提供的其他API来实现该功能。
其中一种实现思路就是:
1.利用GetWindowThreadProcessId获取创建指定窗口线程的标识和创建窗口的进程的标识符;
2.利用CreateToolhelp32Snapshot和Process32First建立系统中全部进程的快照并获取进程信息;
3.然后使用该函数得到的进程ID号,在快照信息中进行匹配,匹配到相应的进程,输出进程名。
通过进程号获取进程名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
LPWSTR GetProcessNameById(DWORD ProcessID) { HANDLE hProcessSnap; PROCESSENTRY32 pe32; LPWSTR result = new WCHAR[32]; //获取系统中全部进程的快照 Take a snapshot of all processes in the system. hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (INVALID_HANDLE_VALUE == hProcessSnap) return(FALSE); pe32.dwSize = sizeof(PROCESSENTRY32); // 获取第一个进程的信息 Retrieve information about the first process, // 若获取失败则退出 and exit if unsuccessful if (!Process32First(hProcessSnap, &pe32)) { // 清除快照 clean the snapshot object CloseHandle(hProcessSnap); printf("!!! Failed to gather information on system processes! \n"); return(NULL); } //匹配进程ID Matching Process ID do { if (ProcessID == pe32.th32ProcessID) { //拷贝进程名 Copy Process Name wcscpy(result, (LPWSTR)pe32.szExeFile); break; } } while (Process32Next(hProcessSnap, &pe32)); // 清除快照 clean the snapshot object CloseHandle(hProcessSnap); return result; } |
GetWindowThreadProcessId获取进程ID
1 2 3 4 |
DWORD WINAPI GetWindowThreadProcessId( _In_ HWND hWnd, _Out_opt_ LPDWORD lpdwProcessId ); |
返回值:
函数返回值:返回创建窗口的线程标识符;
可选返回值:返回创建窗口的进程标识符。
示例:获取创建当前前台窗口的进程名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
LPWSTR GetForegroundWindowProcessId(){ //声明并初始化变量process_ID DWORD process_ID = 0; //获取前台窗口句柄 HWND hwnd_foreground_window = GetForegroundWindow(); //获取创建前台窗口的进程Id,保存到process_ID GetWindowThreadProcessId(hwnd_foreground_window,&process_ID); //声明并初始化变量szProcessName LPWSTR szProcessName = new WCHAR[32]; //将通过进程ID获取的进程名保存到szProcessName wcscpy(szProcessName, GetProcessNameById(process_ID)); //返回szProcessName return szProcessName; } |
如无注明,均为原创。转载请注明: 转载自MITGAI`S THINKING
本文链接地址: Windows 下根据进程ID获取进程名
本文链接地址: Windows 下根据进程ID获取进程名
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
如果本文对您生活或工作产生了积极影响,那我非常高兴。
如果您愿意为文章的内容或想法提供支持,欢迎点击下边的捐赠按钮,资助作者创作更多高价值高品质的内容。
如果您愿意为文章的内容或想法提供支持,欢迎点击下边的捐赠按钮,资助作者创作更多高价值高品质的内容。