У меня есть приложение меню состояния, которое можно запустить, используя ярлык в системе. Когда приложение активируется, было бы здорово, если бы я мог каким-то образом получить текст, который выбран в текущем запуске приложения.
Итак, например, я печатаю что-то в своем текстовом редакторе, выбираю текст, ударяю по моему глобальному ярлыку, прихожу к моему приложению, и теперь мне будет интересно узнать выделенный текст из текстового редактора.
До сих пор я получил следующее (принятый код из Как получить глобальные экранные координаты текущего выделенного текста через API-интерфейсы доступности.)
AXUIElementRef systemWideElement = AXUIElementCreateSystemWide();
AXUIElementRef focussedElement = NULL;
AXError error = AXUIElementCopyAttributeValue(systemWideElement, kAXFocusedUIElementAttribute, (CFTypeRef *)&focussedElement);
if (error != kAXErrorSuccess) {
NSLog(@"Could not get focussed element");
} else {
AXValueRef selectedTextValue = NULL;
AXError getSelectedTextError = AXUIElementCopyAttributeValue(focussedElement, kAXSelectedTextAttribute, (CFTypeRef *)&selectedTextValue);
if (getSelectedTextError == kAXErrorSuccess) {
selectedText = (__bridge NSString *)(selectedTextValue);
NSLog(@"%@", selectedText);
} else {
NSLog(@"Could not get selected text");
}
}
if (focussedElement != NULL) CFRelease(focussedElement);
CFRelease(systemWideElement);
Проблема здесь в том, что она не работает с такими приложениями, как Safari и Mail...
Спасибо