我正在尝试使用winapi在Windows中获取当前窗口或活动窗口及其进程名称。
因此,我使用GetForegroundWindow()
获取了活动窗口,并使用OpenProcess()
获取进程,但问题是OpenProcess需要进程ID,所以我认为可以使用GetProcessId()
,但这个函数需要HANDLE类型的窗口,而不是HWND类型的当前窗口。
我尝试了一些方法,但无法使其工作。所以,有人能告诉我如何使用HWND获取进程ID?或如何获取当前窗口的HANDLE?
如果有人看到可以帮助我的解决方案,请在下面查看我的代码。我正在使用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。 - Remy Lebeau