一个关于枚举窗口的小经验
本文说的窗口,并不纯指“肉眼可看的窗体”,而是指代拥有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”。 哈哈哈。蓝后就可以做一个3D桌面特效插件了。 具体如何枚举可以参照spy++ 这........................
感谢楼主分享~~~
页:
[1]