【发布时间】:2018-03-18 12:06:25
【问题描述】:
【问题讨论】:
-
stackoverflow.com/a/2620522/214671,使用您感兴趣的进程 ID 而不是
GetCurrentProcessId。 -
枚举所有窗口,然后询问每个窗口的PID是什么
【问题讨论】:
GetCurrentProcessId。
进程和窗口之间的联系并不明显。首先,一个进程可以有多个窗口。其次,Windows API 似乎没有提供基于进程查找窗口的方法(我觉得这很奇怪,因为您的屏幕截图显示了这一点)。
但是,您可以通过所有打开的窗口并根据进程进行过滤。请参阅此问题并详细解答如何操作:Find Window and change it's name
【讨论】:
我找到了这个解决方案,但是我得到了一个进程 ID 的多个 HWND
#include <Windows.h>
void GetAllWindowsFromProcessID(DWORD searchPID, std::vector <HWND> &wnds)
{
HWND hCurWnd = NULL;
do
{
hCurWnd = FindWindowEx(NULL, hCurWnd, NULL, NULL);
DWORD processID = 0;
GetWindowThreadProcessId(hCurWnd, &processID);
if (searchPID == processID)
{
wnds.push_back(hCurWnd);
}
} while (hCurWnd != NULL);
}
int main()
{
DWORD PID = 0x00001D7C;
std::vector<HWND> HWND_List;
GetAllWindowsFromProcessID(PID, HWND_List);
return 0;
}
【讨论】:
EnumWindows 确实如此。这个解决方案没有。而且它受到竞争条件的影响,这会在某个时候打击你。与往常一样,如果有人不知道,为什么他们的(是吗,真的吗?)代码有效,但事实并非如此。如果只是因为缺乏任何解释,请不要接受这个答案。