枚举子窗口不起作用,但枚举Windows可以...?

enumerate child windows doesn't function, but enumWindows does...?

本文关键字:枚举 Windows 可以 窗口 不起作用      更新时间:2023-10-16

标题

我不知道为什么,但当我开始枚举窗口时,它是正确的,但枚举子窗口不会进入函数。。。并围绕代码移动。。。如果我设置hwnd=0,它会运行。。。不知道为什么不使用hwnd来查找子窗口。

enter code here
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
HWND h;
int WPoc, CHPoc;
static BOOL CALLBACK EnumWindowsProc(HWND hProg, long lParam)
{
    WPoc++; 
    cout << WPoc << ": " << hProg << endl;
    if(WPoc == 5) h = hProg;
    if (WPoc > 20) return FALSE;
    return TRUE;
}
static BOOL CALLBACK EnumChildProc(HWND hProg, long lParam)
{
    CHPoc++;
    cout <<"ch "<< CHPoc << endl;
    if (CHPoc > 20) return FALSE;
    return TRUE;
}
void Search()
{
    WPoc = 0;
    BOOL ProcSuccess;
    ProcSuccess = EnumWindows((WNDENUMPROC)EnumWindowsProc,NULL);
}
void SearchMap()
{
    CHPoc = 0;
    BOOL ProcSuccess;
    ProcSuccess = EnumChildWindows( h,(WNDENUMPROC)EnumChildProc,NULL);
}
int _tmain(int argc, _TCHAR* argv[])
{
    Search();
    SearchMap();
    return 0;
}

我做了这个简单的代码来查找错误,它也做了同样的事情。。。我不知道怎么了。。。谢谢你的帮助。

这对您不起作用,因为您发现该窗口没有子窗口。调试你的东西。在Serach()之后粘贴断点,见h的值。打开Spy++并找到与h具有相同值的句柄。看看这个窗口是否有儿童。可能输出:

1: 0004069E
2: 000305C4
3: 00030526
4: 00010158
5: 000100BA
6: 000100BC
7: 000100A6
8: 000100AA
9: 000100AC
10: 0001008E
11: 000100A2
12: 000100A4
13: 00010086
14: 00050598
15: 0006052E
16: 0010042E
17: 0011041A
18: 000D040C
19: 000803B8
20: 000903BC
21: 000903C8
ch 1
ch 2
ch 3
ch 4

您发布的程序的输出不是由源代码决定的。

它取决于EnumWindows枚举的第五个窗口的实际窗口,该窗口依赖于系统。如果该窗口没有子窗口,那么您传递给EnumChildWindows的回调将永远不会被调用——显然,在您的情况下,这就是正在发生的情况。