我不知道为什么,但是当我开始枚举窗口时,它会正确显示,但是枚举子窗口不会进入函数...并且移动代码... 如果我把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;
}
我制作了这个简单的代码来发现错误,它也是这样做的...... 我不知道出了什么问题...谢谢你的帮助。
答案 0 :(得分:0)
它不适合你,因为你找到了没有孩子的窗户。调试你的东西。在Serach()
后粘贴breackpoint,查看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
答案 1 :(得分:0)
您发布的程序的输出不是由源代码确定的。
它取决于EnumWindows枚举的第5个窗口的实际窗口,这取决于系统。如果该窗口没有子节点,则传递给EnumChildWindows的回调将永远不会被调用 - 显然,在您的情况下,这就是正在发生的事情。