Swift macOS:如何粘贴到另一个应用程序

时间:2016-10-17 22:07:48

标签: swift macos cocoa operating-system

我正在使用swift为Mac OS 10.10+编写辅助应用程序。我需要能够将常规NSPasteboard 中的内容粘贴到之前处于活动状态的应用程序中。

只是为了说清楚:我需要粘贴到另一个应用程序。

它应该像这样工作:

  1. 用户正在使用一些随机应用程序

  2. 由于用户因残疾而无法按下cmd + v,他们会做出激活我的应用的手势(此部分已完成并且超出了此问题的范围)

  3. 我的应用程序变为活动状态,现在我需要在用户预先使用的应用程序中模拟粘贴操作。这是我不知道该怎么做的。

  4. 最后,之前有效的应用需要再次激活。

  5. 请记住,该应用程序将提交给AppStore。

3 个答案:

答案 0 :(得分:5)

最简单的你需要做两件事:

  1. Subscribe to notifications of the current application changing因此您知道应该将事件发送到哪个应用程序。

  2. Simulate a Cmd+V keypress使用系统事件。

  3. 然而,坏消息是,正如您所说,您需要在App Store提交的应用中执行此操作,您的应用需要位于沙箱中,并且需要临时授权com.apple.security.temporary-exception.apple-events才能将事件发送到系统事件{ {3}}:

      

    在Finder和系统事件中请求必要的Apple事件临时例外权利可能会导致在应用审核过程中被拒绝,因为授予对这些进程的访问权限可以让您的应用程序免费控制大部分操作系统。对于系统级任务,请使用其他方法,如上所述。

    还有一种方法可以使用辅助技术执行第2步,但这也不适用于沙箱。从根本上说,你要做的事情(激活一个外部的任意应用程序,并控制它)几乎就是沙盒的设计目的是阻止你做什么。

    幸运的是,由于macOS 10.8现在有directly quoting the Apple documentation,它在沙箱之外执行。

    NSUserAppleScriptTask有一个变化:使用NSUserAppleScriptTask执行的脚本需要放在应用程序的脚本目录中,并且您的应用程序无法写入,只能从中读取。

    NSUserAppleScriptTask显示了一个示例,说明如何请求对脚本目录进行安全范围写入访问,以便能够将脚本编写到脚本目录中;对于你自己和你的用户来说,你需要第一次打开一个开放的对话框,因此,你需要存储安全范围的书签,这样你就不需要重复练习了,但那是最好能够在沙箱内完成。

    根据我的知识跳过NSUserAppleScriptTask箍的唯一其他途径是说服Apple,接受你的应用程序的临时权利允许它编写系统事件的脚本是一个非常好的主意(我会不要屏住呼吸。)

答案 1 :(得分:2)

我发现这些命令可以使用Foundation模拟剪切/复制/粘贴:

opacity: 0; width:0px; height:0px;

答案 2 :(得分:-1)

我非常确定您可以使用Apple Events执行此操作,但不要忘记设置临时例外权利,以便能够向其他应用发送消息。