我有一个状态菜单应用程序,可以使用系统范围的快捷方式启动。当应用程序启动时,如果我能以某种方式获取在当前运行的应用程序中选择的文本,那就太好了。
例如,我在我的文本编辑器中输入一些内容,选择文本,点击我的全局快捷方式,我的应用程序出现了,我现在很想知道从文本编辑器中选择的文本。
到目前为止,我所拥有的是以下(从如何通过可访问性 API 获取当前选定文本的全局屏幕坐标中采用的代码。)
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 等应用程序......
谢谢