Я имитирую нажатия клавиш в macOS и отправляю их в активное приложение. Я делаю это по линии https://stackoverflow.com/a/27487493/5600424 но в Swift 3. Например, чтобы послать 'A':Имитировать нажатия клавиш с событиями кварца в macOS Sierra
let eventSource = CGEventSource(stateID: CGEventSourceStateID.hidSystemState)
let key: CGKeyCode = 0 // virtual key for 'a'
let eventDown = CGEvent(keyboardEventSource: eventSource, virtualKey: key, keyDown: true)
let eventUp = CGEvent(keyboardEventSource: eventSource, virtualKey: key, keyDown: false)
let location = CGEventTapLocation.cghidEventTap
eventDown.post(tap: location)
eventUp.post(tap: location)
Это работает отлично на OSX El Capitan (Swift 3, Xcode 8.0), но он остановился работая после обновления в macOs Sierra. Само приложение по-прежнему получает нажатие клавиши, когда оно активно, однако, когда активное приложение активно, события кажутся потерянными. Я попытался выяснить, что происходит без успеха, и документация не помогает. Любая помощь будет оценена, спасибо!
Вы пробовали разместить проводку в другом месте контакта, например 'CGEventTapLocation.cgSessionEventTap'? Или, если вы ориентируетесь на конкретное приложение, используя 'postToPSN()'? –
Привет @Ken, я не нацелен на конкретное приложение, я бы хотел, чтобы активное окно приложения переднего плана получало события (с которыми пользователь взаимодействует). Это работало так, как я думал о пред-сиррее. Я также попробовал 'CGEventTapLocation.cgSessionEventTap', но поведение не меняется: события игнорируются, если я переключаюсь на другое приложение. Возможно, правильный способ сделать это - отследить приложение переднего плана с помощью 'NSWorkspace.shared(). RunningApplications.first (где: {$ 0.isActive})' и использовать 'postToPSN()'? – tin
Ну, было бы правильнее использовать 'NSWorkspace.shared(). FrontmostApplication'. ;) Вы можете, конечно, попробовать это. Возможно также, что Sierra ужесточила безопасность сообщений о событиях, и вам необходимо иметь вспомогательный доступ, как вам нужно для ключевого прослушивания событий. –