找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 3685|回复: 4

一个关于枚举窗口的小经验

[复制链接]

55

主题

275

回帖

9352

积分

用户组: 管理员

UID
77
精华
16
威望
237 点
宅币
8217 个
贡献
251 次
宅之契约
0 份
在线时间
254 小时
注册时间
2014-2-22
发表于 2015-6-23 09:08:02 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
本文说的窗口,并不纯指“肉眼可看的窗体”,而是指代拥有HWND的一切“物件”。

很多人以为EnumWindows足以枚举出系统所有的窗口,错!它只能枚举出顶层的窗口。MSDN原文:Enumerates all top-level windows on the screen by passing the handle to each window.

有个函数叫做EnumThreadWindows,很多人也会认为,这应该可以枚举出某个线程的所有窗口了吧?错!它只能枚举出“非子窗口”。MSDN原文:Enumerates all nonchild windows associated with a thread by passing the handle to each window.

还有一个函数叫做EnumChildWindows,貌似这货才能枚举出一个顶层窗口之下的所有窗口。MSDN原文:Enumerates the child windows that belong to the specified parent window by passing the handle to each child window.

所以,如果要枚举系统所有的窗口,必须:
1.使用EnumWindows,获取一份“一级HWND”,然后根据每个“一级HWND”再使用EnumChildWindows枚举出所有“二级HWND”。
2.枚举系统所有线程,使用EnumThreadWindows,获取N份“一级HWND”,然后根据每个“一级HWND”再使用EnumChildWindows枚举出所有“二级HWND”。
回复

使用道具 举报

1110

主题

1651

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
244
威望
743 点
宅币
24225 个
贡献
46222 次
宅之契约
0 份
在线时间
2296 小时
注册时间
2014-1-26
发表于 2015-6-23 10:56:19 来自手机 | 显示全部楼层
哈哈哈。蓝后就可以做一个3D桌面特效插件了。
回复 赞! 靠!

使用道具 举报

307

主题

228

回帖

7335

积分

用户组: 真·技术宅

UID
2
精华
76
威望
291 点
宅币
5585 个
贡献
253 次
宅之契约
0 份
在线时间
947 小时
注册时间
2014-1-25
发表于 2015-6-23 20:07:48 | 显示全部楼层
具体如何枚举可以参照spy++
回复 赞! 靠!

使用道具 举报

5

主题

43

回帖

197

积分

用户组: 小·技术宅

UID
167
精华
0
威望
3 点
宅币
132 个
贡献
11 次
宅之契约
0 份
在线时间
30 小时
注册时间
2014-3-30
发表于 2015-7-6 02:31:30 | 显示全部楼层
这........................
回复

使用道具 举报

1

主题

159

回帖

624

积分

用户组: 大·技术宅

UID
7535
精华
0
威望
0 点
宅币
464 个
贡献
0 次
宅之契约
0 份
在线时间
71 小时
注册时间
2021-10-16
发表于 2022-5-13 16:29:16 | 显示全部楼层

感谢楼主分享~~~
回复 赞! 靠!

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-4-19 10:52 , Processed in 0.034640 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表