AXUIElementCopyAttributeValue无法完成

时间:2014-12-29 19:37:05

标签: c++ macos accessibility osx-yosemite macos-carbon

我试图使用辅助功能API来获取活动窗口,问题是当我尝试获取焦点应用程序时,我得到了一个无法完成的错误。下面是我的一小段代码:

AXUIElementRef systemElement =
    AXUIElementCreateSystemWide();

AXUIElementRef focused = nullptr;
AXError error = AXUIElementCopyAttributeValue (systemElement,
      kAXFocusedApplicationAttribute, (CFTypeRef*) &focused);

// error value results in kAXErrorCannotComplete

我启用了辅助功能,并将我的代码与我在GitHub上找到的代码进行了比较,但似乎没有任何效果,而且我的想法很新鲜。也许我忽略了什么?

1 个答案:

答案 0 :(得分:0)

尝试通过首先设置消息传递超时来解决此问题:

AXError error_code = AXUIElementSetMessagingTimeout( system_element, 0.1f );

可能没有允许元素正确复制属性值,但它也没有导致事情挂起(这是我获取kAXErrorCannotComplete时发生的事情)。尝试收集属性值后,我将消息传递超时重置为系统默认值:

error_code = AXUIElementSetMessagingTimeout( system_element, 0.0f );

正如我最初想的那样,这似乎对我的情况没有任何帮助。留下答案虽然似乎没有解决问题,但它可能会为某些人提供一些信息。