Macos 在Cocoa中的活动应用程序中获取当前选定的文本
我有一个状态菜单应用程序,可以使用系统范围的快捷方式启动。当应用程序激活时,如果我能够以某种方式获取当前运行的应用程序中选择的文本,那将是一件非常棒的事情 例如,我在我的文本编辑器中键入一些内容,选择文本,点击我的全局快捷方式,我的应用程序就会出现,我现在很想从文本编辑器中知道所选的文本 到目前为止,我所拥有的是以下内容(采用的代码来自) 这里的问题是,它不适用于Safari和Mail等应用程序Macos 在Cocoa中的活动应用程序中获取当前选定的文本,macos,cocoa,service,accessibility,Macos,Cocoa,Service,Accessibility,我有一个状态菜单应用程序,可以使用系统范围的快捷方式启动。当应用程序激活时,如果我能够以某种方式获取当前运行的应用程序中选择的文本,那将是一件非常棒的事情 例如,我在我的文本编辑器中键入一些内容,选择文本,点击我的全局快捷方式,我的应用程序就会出现,我现在很想从文本编辑器中知道所选的文本 到目前为止,我所拥有的是以下内容(采用的代码来自) 这里的问题是,它不适用于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);