用 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) } }