这段脚本通过 控件标识符 实现了以下两个主要功能:
- 获取控件标识符的路径(快捷键:
F1
):- 通过鼠标指向某个控件,递归地获取该控件及其父窗口的标识符路径。
- 将标识符路径保存为一个字符串(
path
),便于后续使用。 - 可用于调试和分析复杂窗口结构中控件的层级关系。
- 通过标识符路径定位控件句柄(快捷键:
F2
):- 根据已保存的标识符路径(
path
),递归地查找目标控件句柄。 - 定位目标控件后,可以获取其窗口句柄或其他相关信息,便于进一步操作。
- 根据已保存的标识符路径(
这段脚本是一个非常实用的工具,用于分析和操作复杂窗口中的控件。通过标识符路径定位控件句柄,可以显著提升自动化脚本的精确性和稳定性。特别是在处理动态生成或嵌套控件时,这种方式非常高效且灵活。
;----------------------------------- ; 通过标识符得到控件句柄 By FeiYue ; ; 注意:很多控件都获取不到标识符 ;----------------------------------- F1:: ;-- 获取控件标识符的路径 path:="" MouseGetPos,,, wid, cid, 2 Loop { N:=DllCall("GetDlgCtrlID", "Ptr",cid) MsgBox, 4096,, % "当前控件的标识符:" N pid:=DllCall("GetParent", "Ptr",cid) MsgBox, 4096,, % "主窗口:" wid "`n父窗口:" Format("{:#x}",pid) if (!pid) || DllCall("GetDlgItem", "Ptr",pid, "int",N)!=cid { path:="" MsgBox, 4096,, % "父窗口通过标识符查不到子控件!" Break } cid:=pid, path:=N "-" path } Until (pid=wid) if (path!="") { WinGetTitle, tt, ahk_id %wid% WinGetClass, tc, ahk_id %wid% path:=SubStr(tt,1,50) " ahk_class " tc " || " Trim(path,"-") } return F2:: ;-- 通过控件标识符的路径得到控件句柄 MsgBox, 4096,, % "控件标识符的路径:`n`n" path if RegExMatch(path, "^([\s\S]*)\|\|([\s\w\-]*)$", r) { cid:=WinExist(Trim(r1)) For i,N in StrSplit(Trim(r2), "-") { cid:=DllCall("GetDlgItem", "Ptr",cid, "int",N) ;-- 已找到控件句柄,提示一下控件的边框 ;-- 需要AHK程序的Lib子目录有FindText.ahk WinGetPos, x, y, w, h, ahk_id %cid% ; FindText().MouseTip(x+w//2, y+h//2, w//2, h//2) } } return
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)