(仅作备用,已转用 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) } }