我正在模拟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之后它停止了工作。应用程序本身在活动时仍然会收到击键,但是当其他应用程序处于活动状态时,事件似乎会丢失。我试图弄清楚发生了什么没有成功,文档没有帮助。任何帮助将不胜感激,谢谢!
答案 0 :(得分:1)
问题中引用的代码工作正常,从El Capitan升级到Sierra时,其行为没有改变,与声称的相反。
其他应用程序未收到的击键,因为一旦应用程序在后台,由于独立原因,不再调用负责发送带有上述代码的键盘事件的函数。