【发布时间】:2010-12-02 00:16:40
【问题描述】:
我将很快开发一个应用程序,该应用程序需要在最前面的应用程序窗口中获取当前选定的文本,无论是 Safari、Pages、TextEdit、Word 等,然后对这些文本执行一些操作。
我的目标是找到一种适用于尽可能多应用程序的解决方案。到目前为止,我一直在考虑使用 AppleScript,但这会限制可以与我的服务一起使用的应用程序的数量。至少必须支持这些常见的应用程序:Safari、Firefox(没有 AppleScript?)、Word、Pages、Excel、TextEdit,...
我还考虑将剪贴板的内容保存在一个临时变量中,然后模拟文本复制操作(Cmd-C),获取文本,然后将原始内容放回原处。这将在模拟复制操作时可能会突出显示“编辑”菜单项,并且对我来说似乎有点 hacky。 IMO 这个解决方案对于商业产品来说似乎不够好。
我还希望获得更多的选择(即:Safari 或 Word 中页面的完整内容等)以在将来添加一些附加功能。
关于如何实现此行为的任何想法/细节?
提前感谢您的任何提示!
注意:我需要至少支持 10.4 及更高版本,但最好也支持 10.4 以上。
更新:
我选择的解决方案:使用“责任链”设计模式 (GOF) 结合 3 种不同的输入法(粘贴板、AppleScript 和辅助功能),自动使用最佳可用输入源。
注意,当使用 NSAppleScript 的 executeAndReturnError: 方法返回一个 NSAppleEventDescriptor(假设是一个“descriptor”实例)时,为了让 [descriptor stringValue] 方法返回一些东西,在你的 AppleScript 中你必须使用“return someString” OUTSIDE of a “ tell" 块,否则不会返回任何内容。
【问题讨论】:
-
您是否有机会发布一些关于如何从最前面的应用程序获取所选文本的代码?
-
你最终解决了这个问题吗?您是如何通过 ApplicationServices 获得重点突出的 UI 元素的?
-
不幸的是,这是很久以前的事了(在以前的工作中),我完全不记得我最终是如何做到的,而且我再也无法访问源代码了。我记得那不是很难。您可能会在其他地方找到示例。对不起:(
标签: swift objective-c cocoa appkit