原先的方法是用MSAA,是比较老的技术,获取速度也比较慢。
最近初步学习了 UIA(AutoHotkey 使用 UI Automation(UIA) 获取相关信息简易教程-20210210),发现很强大,于是更新了调用函数,速度很快。
测试环境:百分浏览器,win10 64位
; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=3702 msgbox(getUrl()) getUrl() { arrHwnd := getHwnd("Chrome_RenderWidgetHostHWND1") hCtl := arrHwnd[2] uia := ComObjCreate("{ff48dba4-60ef-4201-aa87-54103eef594e}", "{30cbe57d-d9d0-452a-ab13-7ac5ac4825ee}") ;获取 AutomationElement dllcall(numget(numget(uia,0,"ptr") + 6*A_PtrSize, 0, "ptr"), "ptr",uia, "ptr",hCtl, "ptr*",ae) ;创建 variant 变量 VarSetCapacity(var, 8 + 2*A_PtrSize) numput(0, var, 0, "short") numput(0, var, 8, "ptr") ;获取 Value dllcall(numget(numget(ae,0,"ptr") + 10*A_PtrSize, 0, "ptr"), "ptr",ae, "int",30045, "ptr",&var) return strget(numget(var, 8, "ptr"), "utf-16") } ;ctl为空则获取主窗口的 hwnd ;否则返回 [hwnd, hCtl] getHwnd(ctl:="") { for k, idWin in WinGetList("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe") { if strlen(WinGetTitle("ahk_id " . idWin)) { return [idWin, ControlGetHwnd(ctl, "ahk_id " . idWin)] } } }