hyaray

原先的方法是用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)]
        }
    }
}

 

 

 

 

分类:

技术点:

相关文章:

  • 2021-10-08
  • 2022-12-23
  • 2021-05-19
  • 2021-06-07
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-22
  • 2022-12-23
  • 2021-09-17
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案