Golden Blonde 发表于 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”。

0xAA55 发表于 2015-6-23 10:56:19

哈哈哈。蓝后就可以做一个3D桌面特效插件了。

元始天尊 发表于 2015-6-23 20:07:48

具体如何枚举可以参照spy++

FFFFFFFE 发表于 2015-7-6 02:31:30

这........................

xiawan 发表于 2022-5-13 16:29:16


感谢楼主分享~~~
页: [1]
查看完整版本: 一个关于枚举窗口的小经验