Отправляйте нажатия клавиш в приложение Mail с помощью Swift и Apple Scripting Bridge - PullRequest
1 голос
/ 12 апреля 2019

У меня есть простое приложение Swift, которое должно иметь возможность контролировать и отправлять нажатия клавиш в Mail.app.В чистом AppleScript я сделал бы что-то вроде:

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

Я прочитал руководство по программированию Scripting Bridge от Apple и Общение с приложениями с использованием AppleScript и Swift , поэтому яя могу сделать это в Swift:

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

Чего я не понимаю, так это как я могу воспроизвести функциональность AppleScript tell application "System Events" to keystroke ... в Swift.«Системные события» не являются SBApplication, поэтому я не могу получить ссылку на него так же, как и Mail.app.

1 Ответ

0 голосов
/ 13 апреля 2019

Нет необходимости эмулировать нажатия клавиш, используя GUI Scripting, который является хрупким и нестабильным.Хотя это не совсем очевидно из словаря Mail (который является беспорядком), вы можете использовать AppleScript для непосредственного выбора почтовых ящиков.

Хитрость заключается в манипулировании свойством selected messages переднего message viewer объекта.

Класс application определяет свойства, содержащие ссылки на стандартные почтовые ящики (inbox, outbox, drafts 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.)

...