C++ HWND按进程名称(无windowname)
是否可以通过进程名从窗口获取C++ HWND按进程名称(无windowname),c++,winapi,C++,Winapi,是否可以通过进程名从窗口获取HWND? 每次重新启动时窗口的名称都会更改(随机windowname),如下所示: 我只是找到了一些按窗口名获取的内容。进程和窗口之间的联系并不明显。首先,一个进程可以有几个窗口。其次,Windows API似乎没有提供一种基于进程查找Windows的方法(鉴于您的屏幕截图显示了这一点,我觉得这很奇怪) 但是,您可以遍历所有打开的窗口,并根据进程进行筛选。查看此问题,并详细回答如何执行此操作:我找到了此解决方案,但我为一个进程ID获得了多个HWND #includ
HWND
?
每次重新启动时窗口的名称都会更改(随机windowname),如下所示:
我只是找到了一些按窗口名获取的内容。进程和窗口之间的联系并不明显。首先,一个进程可以有几个窗口。其次,Windows API似乎没有提供一种基于进程查找Windows的方法(鉴于您的屏幕截图显示了这一点,我觉得这很奇怪)
但是,您可以遍历所有打开的窗口,并根据进程进行筛选。查看此问题,并详细回答如何执行此操作:我找到了此解决方案,但我为一个进程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;
}
#包括
void GetAllWindowsFromProcessID(DWORD searchPID、std::vector和wnds)
{
HWND hCurWnd=NULL;
做
{
hCurWnd=FindWindowEx(NULL,hCurWnd,NULL,NULL);
DWORD processID=0;
GetWindowThreadProcessId(hCurWnd和processID);
if(searchPID==processID)
{
wnds。推回(hCurWnd);
}
}while(hCurWnd!=NULL);
}
int main()
{
DWORD PID=0x00001D7C;
std::向量HWND_列表;
GetAllWindowsFromProcessID(PID、HWND_列表);
返回0;
}
是的,通过代码,我刚刚发现,通过窗口名称获取它,但它是随机的--你想用它来代替。此外,张贴您不理解的代码几乎不会产生高质量的答案。这一个当然不是。这很有帮助,得到了相同的结果,多个HWND,我发现第二个索引包含窗口的右HWND。@rck:您希望枚举顶级窗口<代码>枚举窗口执行此操作。这个解决方案不适用。它有一个比赛条件,这会在某个时候打击你。和往常一样,如果有人不知道为什么他们的(真的吗?)代码能工作,它就不会。如果没有任何解释,请不要接受这个答案。使用您感兴趣的进程ID而不是GetCurrentProcessId
。枚举所有窗口,然后询问每个窗口的PID是什么