精易论坛

标题: 代码记录,GetWindow遍历所有窗口/子窗口 [打印本页]

作者: 黑猫よ__    时间: 2015-12-14 13:05
标题: 代码记录,GetWindow遍历所有窗口/子窗口
     非常简单实用的代码,贴出来,方便搜索,使用GetWindow,采集桌面所有窗口/子窗口句柄。

API

HWND GetWindow(HWND hWnd,int nCmd)
HWND GetDesktopWindow(void)
DWORD GetWindowThreadProcessId(HWND nWnd,LPDWORD  lpdwProcessId)
int GetClassNameA(HWND hWnd, LPSTR lpClassName,int nMaxCount)
int GetWindowTextA(HWND hWnd,LPSTR lpString,int nMaxCount)

常量

.常量 GW_CHILD, "5"
.常量 GW_HWNDNEXT, "2"

.常量 MAX_PATH, "260"

代码:

  
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
变量名类 型静态数组备 注
查找结果整数型0
结果数整数型 
结果数 = 枚举窗口_ (GetDesktopWindow (), 4820, “Internet Explorer_Server”, 字符 (0), 真, 查找结果)  ' 在IE进程中查找 Internet Explorer_Server
返回 (0)  ' 可以根据您的需要返回任意数值
子程序名返回值类型公开备 注
枚举窗口_整数型 
参数名类 型参考可空数组备 注
起始句柄_整数型
进程ID_整数型如无请填写 0
类名_文本型如无请填写 字符(0)
标题_文本型如无请填写 字符(0)
完全查找_逻辑型真:遍历完所有句柄,将符合条件的句柄全部抓取; 假:发现符合条件的句柄后立即返回
结果数组_整数型如有多个,则在此获得反馈,返回值将为查找到的数量。
变量名类 型静态数组备 注
子句柄整数型 
结果整数型 
句柄所属进程ID整数型 
句柄类名文本型 
句柄标题文本型 
如果真 (进程ID_ = 0 类名_ = 字符 (0) 标题_ = 字符 (0))  ' 至少需要一个条件
返回 (0)
句柄类名 = 取空白文本 ( #MAX_PATH )
句柄标题 = 取空白文本 ( #MAX_PATH )
如果真 (起始句柄_ ≠ 0)
子句柄 = GetWindow (起始句柄_, #GW_CHILD )
判断循环首 (子句柄 ≠ 0)
结果 = 枚举窗口_ (子句柄, 进程ID_, 类名_, 标题_, 完全查找_, 结果数组_)
如果真 (结果 ≠ 0)
返回 (结果)
GetWindowThreadProcessId (子句柄, 句柄所属进程ID)
GetClassNameA (子句柄, 句柄类名, #MAX_PATH )
GetWindowTextA (子句柄, 句柄标题, #MAX_PATH )
判断 (句柄所属进程ID ≠ 0 类名_ ≠ 字符 (0) 标题_ ≠ 字符 (0))
如果真 (句柄所属进程ID = 进程ID_ 句柄类名 = 类名_ 句柄标题 = 标题_)
判断 (完全查找_)
加入成员 (结果数组_, 子句柄)
返回 (子句柄)


判断 (句柄所属进程ID ≠ 0 类名_ ≠ 字符 (0) 标题_ = 字符 (0))
如果真 (句柄所属进程ID = 进程ID_ 句柄类名 = 类名_)
判断 (完全查找_)
加入成员 (结果数组_, 子句柄)
返回 (子句柄)


判断 (句柄所属进程ID ≠ 0 类名_ = 字符 (0) 标题_ ≠ 字符 (0))
如果真 (句柄所属进程ID = 进程ID_ 句柄标题 = 标题_)
判断 (完全查找_)
加入成员 (结果数组_, 子句柄)
返回 (子句柄)


判断 (句柄所属进程ID = 0 类名_ ≠ 字符 (0) 标题_ ≠ 字符 (0))
如果真 (句柄类名 = 类名_ 句柄标题 = 标题_)
判断 (完全查找_)
加入成员 (结果数组_, 子句柄)
返回 (子句柄)


判断 (句柄所属进程ID = 0 类名_ = 字符 (0) 标题_ ≠ 字符 (0))
如果真 (句柄标题 = 标题_)
判断 (完全查找_)
加入成员 (结果数组_, 子句柄)
返回 (子句柄)


判断 (句柄所属进程ID = 0 类名_ ≠ 字符 (0) 标题_ = 字符 (0))
如果真 (句柄类名 = 类名_)
判断 (完全查找_)
加入成员 (结果数组_, 子句柄)
返回 (子句柄)


判断 (句柄所属进程ID ≠ 0 类名_ = 字符 (0) 标题_ = 字符 (0))
如果真 (句柄所属进程ID = 进程ID_)
判断 (完全查找_)
加入成员 (结果数组_, 子句柄)
返回 (子句柄)




子句柄 = GetWindow (子句柄, #GW_HWNDNEXT )
判断循环尾 ()
返回 (取数组成员数 (结果数组_))



作者: 黑猫よ__    时间: 2015-12-14 13:12
demo 下载 : GetWindow.rar (2.54 KB, 下载次数: 102)

作者: Heretic    时间: 2015-12-14 14:14
支持下
作者: a一切安好    时间: 2015-12-14 14:34
我来支持一下咯
作者: a一切安好    时间: 2015-12-14 14:36
我来看看咯
作者: QS171333    时间: 2015-12-14 15:41
支持下
作者: hikarugl    时间: 2015-12-14 18:26
感谢分享,谢谢楼主~~
作者: wxy0627    时间: 2015-12-16 22:31
谢谢                 
作者: 紫凌    时间: 2016-2-9 21:19
呃,有点复杂- =~有没有简单的例子哦。。。枚举窗口是DLL命令还是什么啊?GetDesktopWindow是什么参数= =~新手哦,体谅下,谢谢。有没有类似的视频教程?或者简单程序?
作者: hs013    时间: 2018-10-13 00:44
我来支持一下咯
作者: hjdnwx    时间: 2019-5-9 15:04
66666666666666666666666666666666666
作者: 已注销578546    时间: 2019-9-17 23:46
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4