枚举子窗口不起作用,但枚举Windows可以...?
enumerate child windows doesn't function, but enumWindows does...?
标题
我不知道为什么,但当我开始枚举窗口时,它是正确的,但枚举子窗口不会进入函数。。。并围绕代码移动。。。如果我设置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的回调将永远不会被调用——显然,在您的情况下,这就是正在发生的情况。
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 是否有 Windows 用户空间函数来枚举连接的网络共享?
- 如何在 Windows 中通过 SSL 端口枚举域控制器
- Windows Service 可以枚举桌面顶级窗口吗?
- 如何知道初始即插即用枚举何时在 Windows 中完成
- 枚举在Windows上具有意想不到的价值,但在Linux上没有
- 枚举C++中安装在windows上的应用程序
- c++中的枚举类不能在Mac中编译,而在Windows中工作
- 为什么枚举与 Windows 中的位字段不兼容
- 枚举 Windows 中特定类型的文件
- 如何枚举连接到Windows Embedded 7上根集线器的第一个端口的USB集线器
- 枚举LAN中具有Windows操作系统的计算机
- 在包含windows.h:语法错误之后无法定义枚举
- 如何枚举Windows 8和Windows 10中安装的StoreApps及其ID
- 枚举子窗口不起作用,但枚举Windows可以...?