辅助功能API替代方法从osx中的任何应用程序获取所选文本

时间:2013-11-05 20:43:28

标签: macos accessibility selectedtext

我已经编写了一个代码,可以让我在TextEdit.app或其他几个应用程序中获取所选文本。我的问题是我需要在任何应用程序中获取所选文本。似乎可访问性API无法获取每个应用程序的选定文本,因为我可以通过使用辅助功能检查器来证明。

第一张图显示了辅助功能API如何从TextEdit.app中的AXTextArea获取所选文本作为属性:

The Accessibility Inspector detecting AXTextArea and AXSelectedText in the Text Edit App

然后我尝试从TextWrangler.app获取相同的信息,但它不会以相同的方式工作。

The Accessibility Inspector can't detect selected text in the Text Wrangler App

是否可以从任何应用程序或至少大部分应用程序中获取所选文本信息?

1 个答案:

答案 0 :(得分:2)

我知道的唯一选择是发送Cmd-c并监控粘贴板:

+ (void)sendCommandC
{
    CGKeyCode _C = [[DJRKeyboardTools sharedInstance] keyCodeForChar:'c'];
    CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
    CGEventRef pasteCommandDown = CGEventCreateKeyboardEvent(source, _C, YES);
    CGEventSetFlags(pasteCommandDown, kCGEventFlagMaskCommand);
    CGEventRef pasteCommandUp = CGEventCreateKeyboardEvent(source, _C, NO);

    CGEventPost(kCGAnnotatedSessionEventTap, pasteCommandDown);
    CGEventPost(kCGAnnotatedSessionEventTap, pasteCommandUp);

    CFRelease(pasteCommandUp);
    CFRelease(pasteCommandDown);
    CFRelease(source);    
}

这段代码将发布键盘事件。你需要更多的代码。我的这些要点可以帮助你开始: