【发布时间】:2015-12-11 23:13:11
【问题描述】:
我正在尝试使用 winapi 在 Windows 中获取当前窗口或活动窗口以及该窗口的进程名称。
所以,我能够使用GetForegroundWindow() 获取活动窗口,并且我正在使用OpenProcess() 来获取进程,问题是OpenProcess 需要进程ID,所以我虽然可以使用GetProcessId() 但是这个接收 HANDLE 类型的窗口,我有 HWND 类型的当前窗口。
我尝试了几件事,但无法成功。那么任何人都可以告诉我如何在 HWND 中获取带有窗口的进程 ID 吗?或者获取当前窗口的句柄??
我把我的代码留在这里,以防有人看到对我有帮助的解决方案。我正在使用 Qt 和 C++
char wnd_title[256];
HWND hwnd=GetForegroundWindow(); // get handle of currently active window
GetWindowText(hwnd,wnd_title,sizeof(wnd_title));
HANDLE Handle = OpenProcess(
PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
FALSE,
GetProcessId(hwnd) // GetProcessId is returning 0
);
if (Handle)
{
TCHAR Buffer[MAX_PATH];
if (GetModuleFileNameEx(Handle, 0, Buffer, MAX_PATH))
{
printf("Paht: %s", Buffer);
// At this point, buffer contains the full path to the executable
}
CloseHandle(Handle);
}
【问题讨论】:
-
GetProcessId()不接受窗口句柄作为输入,而是接受进程句柄。它检索指定进程的 ID。