win32遍历该窗口的所有进程代码展示
时间: 2023-12-08 10:05:41 浏览: 89
以下是使用Win32 API遍历窗口的所有进程的示例代码:
```c++
#include <windows.h>
#include <tchar.h>
#include <psapi.h>
#include <iostream>
using namespace std;
BOOL CALLBACK EnumProcessModulesProc(HMODULE hModule, DWORD_PTR dwBaseAddress)
{
TCHAR szModName[MAX_PATH];
if (GetModuleFileNameEx(GetCurrentProcess(), hModule, szModName, sizeof(szModName) / sizeof(TCHAR)))
{
wcout << L" " << szModName << endl;
}
return TRUE;
}
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
DWORD dwProcessId;
GetWindowThreadProcessId(hwnd, &dwProcessId);
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcessId);
if (hProcess)
{
TCHAR szProcessName[MAX_PATH];
if (GetModuleBaseName(hProcess, NULL, szProcessName, sizeof(szProcessName) / sizeof(TCHAR)))
{
wcout << L"Process Name: " << szProcessName << endl;
}
wcout << L"Process ID: " << dwProcessId << endl;
HMODULE hMods[1024];
DWORD cbNeeded;
if (EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
{
for (int i = 0; i < (cbNeeded / sizeof(HMODULE)); i++)
{
EnumProcessModulesProc(hMods[i], (DWORD_PTR)hProcess);
}
}
}
CloseHandle(hProcess);
return TRUE;
}
int main()
{
EnumWindows(EnumWindowsProc, NULL);
return 0;
}
```
该示例使用两个回调函数来完成任务。`EnumWindowsProc`函数遍历所有窗口,并使用`GetWindowThreadProcessId`函数获取每个窗口所属的进程ID。然后,它打开进程句柄,并使用`GetModuleBaseName`函数获取进程名称。最后,它使用`EnumProcessModules`函数枚举进程的所有模块,并调用`EnumProcessModulesProc`回调函数来获取每个模块的名称。
`EnumProcessModulesProc`函数获取模块的名称,并输出到控制台。
请注意,此示例代码需要链接`psapi.lib`库。
阅读全文