4

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

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

在文本编辑应用程序中检测 AXTextArea 和 AXSelectedText 的辅助功能检查器

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

辅助功能检查器无法检测到 Text Wrangler 应用程序中的选定文本

是否有替代方法可以从任何应用程序或至少大多数应用程序中获取选定的文本信息?

4

1 回答 1

3

我知道的唯一选择是发送 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);    
}

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

于 2013-11-05T21:18:36.743 回答