Я пытаюсь использовать API специальных возможностей, чтобы получить активное окно, проблема в том, что когда я пытаюсь получить сфокусированное приложение, я получаю сообщение об ошибке «Не удается завершить». Ниже приведен небольшой фрагмент моего кода:
AXUIElementRef systemElement =
AXUIElementCreateSystemWide();
AXUIElementRef focused = nullptr;
AXError error = AXUIElementCopyAttributeValue (systemElement,
kAXFocusedApplicationAttribute, (CFTypeRef*) &focused);
// error value results in kAXErrorCannotComplete
У меня включена специальная доступность, и я сравнил свой код с кодом, найденным на GitHub, но, похоже, ничего не работает, и у меня нет идей. Возможно, я что-то пропускаю?
я пытался чтобы решить эту проблему, сначала установите тайм-аут обмена сообщениями:
AXError error_code = AXUIElementSetMessagingTimeout( system_element, 0.1f );
Что, возможно, не позволило элементу правильно скопировать значение атрибута, но это также не привело к зависанию (что и происходило, когда я получал kAXErrorCannotComplete). Как только я закончил пытаться собрать значение атрибута, я сбросил тайм-аут обмена сообщениями обратно к системному значению по умолчанию:
error_code = AXUIElementSetMessagingTimeout( system_element, 0.0f );
Кажется, это не помогло в моей ситуации, как я изначально думал. Оставляя ответ, хотя он, кажется, не решает проблему, он может предоставить некоторую информацию для кого-то.