Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ HWND按进程名称(无windowname)_C++_Winapi - Fatal编程技术网

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是什么