AXUIElementCopyAttributeValue 无法完成

Dav*_*ave 6 c++ macos accessibility macos-carbon osx-yosemite

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

AXUIElementRef systemElement =
    AXUIElementCreateSystemWide();

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

// error value results in kAXErrorCannotComplete
Run Code Online (Sandbox Code Playgroud)

我启用了可访问性,并将我的代码与我在 GitHub 上找到的代码进行了比较,但似乎没有任何效果,而且我没有任何想法。也许我忽略了一些东西?

Tim*_*det -2

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

AXError error_code = AXUIElementSetMessagingTimeout( system_element, 0.1f );
Run Code Online (Sandbox Code Playgroud)

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

error_code = AXUIElementSetMessagingTimeout( system_element, 0.0f );
Run Code Online (Sandbox Code Playgroud)

正如我最初所想的那样,这似乎对我的情况实际上没有帮助。留下答案虽然看起来并不能解决问题,但可能会为某人提供一些信息。