使用Swift和Apple的Scripting Bridge将击键发送到Mail应用

时间:2019-04-12 11:00:09

标签: swift xcode applescript scripting-bridge

我有一个简单的Swift应用程序,它需要能够控制击键并将其发送到Mail.app。在纯AppleScript中,我会做类似的事情:

tell application "Mail"
  activate
  tell application "System Events" to keystroke "2" using command down

我已经阅读了Apple的Scripting Bridge Programming GuideCommunicating with Apps using AppleScript and Swift,因此可以在Swift中做到这一点:

if let application = SBApplication(bundleIdentifier: "com.apple.Mail") {
  let mailApplication = application as MailApplication
  ...

我不了解的是如何在Swift中复制AppleScript的tell application "System Events" to keystroke ...功能。 “系统事件”不是SBApplication,因此我无法像Mail.app一样获得对它的引用。

1 个答案:

答案 0 :(得分:0)

无需使用易碎易碎的GUI脚本来模拟击键。虽然从Mail的词典中并不能完全清楚(这很混乱),但是您可以使用AppleScript直接选择邮箱。

技巧是操纵最前面的selected messages对象的message viewer属性。

application类定义了一些属性,这些属性包含对标准邮箱的引用(inboxoutboxdrafts mailbox等)

tell application "Mail"
    set selected mailboxes of message viewer 1 to drafts mailbox
end tell

或者您可以按名称引用自定义邮箱:

tell application "Mail"
    set selected mailboxes of message viewer 1 to mailbox "Foo"
end tell

(要查找自定义邮箱的名称,请使用tell application "Mail" to get name of every mailbox。)