这段脚本通过 控件标识符 实现了以下两个主要功能:
- 获取控件标识符的路径(快捷键:
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)