如何使用Mac OS X辅助功能API检索活动窗口URL



我想知道是否有办法检索活动窗口的URL(如果有(。下面的代码应该可以工作,但它不起作用,标题变量变成了"",我没有得到任何新的信息。

我确信这是因为我使用了错误对象的kAXURLAttributes,但我不知道应该从哪个对象复制它。。。苹果的文档几乎没有解释。

AXUIElementRef appElem = AXUIElementCreateApplication(pid), window = nullptr;
CFStringRef title = nullptr;
if (!appElem) { return; }
if (AXUIElementCopyAttributeValue (appElem, kAXFocusedWindowAttribute,
reinterpret_cast<CFTypeRef*>(&window)) != kAXErrorSuccess && appElem)
CFRelease(appElem);
if(AXUIElementCopyAttributeValue (window, kAXTitleAttribute,
reinterpret_cast<CFTypeRef*>(&title))!=kAXErrorSuccess && window)
CFRelease(window);
focusedAppTitle = QString::fromCFString(title);
if(AXUIElementCopyAttributeValue (window, kAXURLAttribute,
reinterpret_cast<CFTypeRef*>(&title))!=kAXErrorSuccess)
CFRelease(window);
}

似乎没有任何通用的方法来做到这一点。例如,Firefox不会通过Accessibility API公开其窗口的任何内容。

使用Safari,我能够找到URL,但它有点隐藏在UI元素层次结构中。例如,在AppleScript对象说明符语法中,对象是:

UI element 2 of group 2 of toolbar 1 of window 1 of ¬
application process "Safari" of application "System Events"

元素的角色是"AXSafariAddressAndSearchField",其值是URL。如果用户正在编辑该字段的内容,则其值可能显示编辑,而不是实际显示的内容的URL。我不知道。

还有:

UI element 1 of scroll area 1 of group 1 of group 1 of ¬
tab group 1 of splitter group 1 of window 1 of ¬
application process "Safari" of application "System Events"

它的角色是"AXWebArea"。它有一个"AXURL"(kAXURLAttribute(属性,其值是页面的URL。

对于Safari的其他版本或不同的UI配置,这些可访问性路径可能不同。(例如,我的窗口只有一个选项卡打开。(

您可能需要编写代码来枚举整个元素层次结构,以按角色查找所需的层次结构。

我还没有用Chrome进行测试。不过,我确实在它的来源中看到了对"AXWebArea"的引用,所以同样的策略可能对它有效

相关内容

  • 没有找到相关文章

最新更新