Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 在Cocoa中的活动应用程序中获取当前选定的文本_Macos_Cocoa_Service_Accessibility - Fatal编程技术网

Macos 在Cocoa中的活动应用程序中获取当前选定的文本

Macos 在Cocoa中的活动应用程序中获取当前选定的文本,macos,cocoa,service,accessibility,Macos,Cocoa,Service,Accessibility,我有一个状态菜单应用程序,可以使用系统范围的快捷方式启动。当应用程序激活时,如果我能够以某种方式获取当前运行的应用程序中选择的文本,那将是一件非常棒的事情 例如,我在我的文本编辑器中键入一些内容,选择文本,点击我的全局快捷方式,我的应用程序就会出现,我现在很想从文本编辑器中知道所选的文本 到目前为止,我所拥有的是以下内容(采用的代码来自) 这里的问题是,它不适用于Safari和Mail等应用程序 谢谢从技术上讲,这并不能解决您的确切问题,因为用户必须从“服务”菜单触发此操作,而不是在他们触发您的

我有一个状态菜单应用程序,可以使用系统范围的快捷方式启动。当应用程序激活时,如果我能够以某种方式获取当前运行的应用程序中选择的文本,那将是一件非常棒的事情

例如,我在我的文本编辑器中键入一些内容,选择文本,点击我的全局快捷方式,我的应用程序就会出现,我现在很想从文本编辑器中知道所选的文本

到目前为止,我所拥有的是以下内容(采用的代码来自)

这里的问题是,它不适用于Safari和Mail等应用程序


谢谢

从技术上讲,这并不能解决您的确切问题,因为用户必须从“服务”菜单触发此操作,而不是在他们触发您的菜单栏应用程序时发生


你可以用一个小盒子。您为应用程序创建了一个服务,通过粘贴板将当前选定的文本发送到菜单栏应用程序。

您解决了这个问题吗?没有。。。但我最终并不需要它。。。但仍有兴趣知道它在应用商店保存和可靠的方式下如何工作…这里相同…也希望看到无应用商店保存方式…这里有更新吗?我最终不需要它,所以我不知道目前是否有合适的解决方案。。。很抱歉
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);