我正在模拟 macOS 中的击键,并将它们发送到活动应用程序。我按照https://stackoverflow.com/a/27487493/5600424但在 Swift 3 中执行此操作。例如,发送“a”:
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 后停止工作。应用程序本身在其处于活动状态时仍会收到击键,但是当另一个应用程序处于活动状态时,事件似乎会丢失。我试图弄清楚发生了什么但没有成功,并且文档没有帮助。任何帮助将不胜感激,谢谢!