微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

objective-c – 如何从其他应用程序中获取所选文本?

我将很快开发一个应用程序,它需要在最前面的应用程序窗口中获取当前选定的文本,无论是Safari,Pages,TextEdit,Word等,并对该文本执行某些操作.

我的目标是找到一个尽可能多的应用程序的解决方案.到目前为止,我考虑过使用AppleScript,但这会限制可以与我的服务一起使用的应用程序数量.至少必须支持这些常见的应用程序:Safari,Firefox(没有AppleScript?),Word,Excel,……

我还考虑将剪贴板的内容保存在临时变量中,然后模拟文本复制操作(Cmd-C),获取文本然后重新放入原始内容.这可能会在模拟复制操作时突出显示“编辑”菜单项对我来说似乎有些笨拙. IMO这个解决方案似乎不适合商业产品.

我也希望得到的不仅仅是选择(即:Safari或Word中页面的完整内容等),以便将来添加一些额外的功能.

有关如何实现此行为的任何想法/详细信息?

提前感谢任何提示

N.B:我需要支持至少10.4及以上,但理想情况下也要超过10.4.

更新:

我选择的解决方案:使用“责任链”设计模式(GOF)结合3种不同的输入方法(Pasteboard,AppleScript和Accessibility),自动使用最佳可用输入源.

请注意,当使用NSAppleScript的executeAndReturnError:方法返回NSAppleEventDescriptor(假设为“描述符”实例)时,对于[descriptor stringValue]方法返回内容,在AppleScript中必须使用“return someString”OUTSIDE of“tell”block否则什么也不会被退回.

解决方法

可访问性将起作用,但仅限于辅助设备的访问权限已启用.

您需要获取当前应用程序,然后获取其聚焦的UI元素,然后获取其选定的文本范围及其值(全文)和选定的文本范围.您可以只获取其选定的文本,但这可以连接或忽略多个选择.

准备好任何失败的步骤:应用程序可能没有任何窗口,可能没有焦点的UI元素,焦点的UI元素可能没有文本,并且焦点的UI元素可能只有一个空的选定文本范围.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐