(仅作备用,已转用 UIA)AutoHotkey通过acc获取windows10新增的设置界面(ApplicationFrameHost.exe)相关信息

 

用 AutoHotkey 通过 acc 方式获取上图的相关信息。

值得注意的是 acc 不是用窗口的 hwnd, 而是从控件 Windows.UI.Core.CoreWindow1 的 hwnd 一层层获取的。

相关文件下载

AccViewer.exe 是查看窗口的工具,

acc.ahk 是基础库,

具体应用见 Applicationframehost.ahk

msgbox(format("分类:{1}`n列表第2项:{2}`n标题:{3}`n子标题:{4}", _10.type(),_10.list()[2],_10.title(),_10.subTitle()))
#include *i %A_LineFile%\..\acc.ahk

#if WinActive("ahk_exe ApplicationFrameHost.exe")

:O:eng::english(United States)
return

F4::
_10.title()
return

#if

class _10
{

    accRoot(winTitle:="ahk_class ApplicationFrameWindow")
    {
        winId := ControlGetHwnd("Windows.UI.Core.CoreWindow1", winTitle) ;NOTE 不是主窗口,而是控件
        dllcall("LoadLibrary","Str","oleacc","Ptr")
        if dllcall("oleacc\AccessibleObjectFromWindow", "ptr",winId, "uint",0, "ptr",-VarSetCapacity(IID,16)+NumPut(0x719B3800AA000C81,NumPut(0x11CF3C3D618736E0,IID,"int64"),"int64"), "ptr*",pacc)=0
            return ComObject(9,pacc,1)
    }

    ;分类(查找框下面第1行)
    type(winTitle:="ahk_class ApplicationFrameWindow")
    {
        return Acc_GetChildByPath(this.accRoot(winTitle), "4.4").accName(0)
    }

    ;左侧列表名称
    list(winTitle:="ahk_class ApplicationFrameWindow")
    {
        arr := []
        for _, accChild in Acc_Children(Acc_GetChildByPath(this.accRoot(winTitle), "4.5"))
            arr.push(accChild.accName(0))
        return arr
    }

    ;标题(右侧第1行)
    title(winTitle:="ahk_class ApplicationFrameWindow")
    {
        return Acc_GetChildByPath(this.accRoot(winTitle), "4.6.1").accName(0)
    }

    ;子标题(右侧第2行)
    subTitle(winTitle:="ahk_class ApplicationFrameWindow")
    {
        return Acc_GetChildByPath(this.accRoot(winTitle), "4.6.2.1.1").accName(0)
    }

}

 

posted @ 2020-03-07 16:46  火冷  阅读(2616)  评论(1编辑  收藏  举报