这段脚本通过 控件标识符 实现了以下两个主要功能:

  1. 获取控件标识符的路径(快捷键:F1):
    • 通过鼠标指向某个控件,递归地获取该控件及其父窗口的标识符路径。
    • 将标识符路径保存为一个字符串(path),便于后续使用。
    • 可用于调试和分析复杂窗口结构中控件的层级关系。
  2. 通过标识符路径定位控件句柄(快捷键: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

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。