【问题标题】:Get currently selected text in active application in Cocoa在 Cocoa 的活动应用程序中获取当前选定的文本
【发布时间】:2013-11-27 14:28:30
【问题描述】:

我有一个可以使用系统范围的快捷方式启动的状态菜单应用程序。当应用程序启动时,如果我能以某种方式获取在当前运行的应用程序中选择的文本,那就太好了。

例如,我在我的文本编辑器中输入一些内容,选择文本,点击我的全局快捷方式,我的应用程序出现了,我现在很想知道来自文本编辑器的选定文本。

到目前为止,我有以下内容(采用 How to get global screen coordinates of currently selected text via Accessibility APIs. 的代码)

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 等应用程序...

谢谢

【问题讨论】:

  • 这个问题你解决了吗?
  • 不...但我最终不需要它...但仍然有兴趣知道它如何以 App-Store 保存和可靠的方式工作...跨度>
  • 这里也一样...也想看看非Appstore的保存方式...
  • 这里有什么更新吗?
  • 我最终不需要它,所以我不知道目前是否有合适的解决方案......对不起......

标签: macos cocoa service accessibility


【解决方案1】:

从技术上讲,这不是您确切问题的解决方案,因为用户必须从“服务”菜单触发此问题,而不是在触发您的菜单栏应用时发生。

您可以使用System Service。您为您的应用创建一个服务,通过粘贴板将当前选择的文本发送到您的菜单栏应用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-25
    • 2013-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    相关资源
    最近更新 更多