我在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之后停止了工作。当应用程序处于活动状态时,它本身仍然接收击键,但是当另一个应用程序处于活动状态时,事件似乎会丢失。我试图弄清楚发生了什么,但没有成功,文档也没有帮助。任何帮助都将不胜感激,谢谢!

最佳答案

问题中引用的代码工作正常,从El Capitan升级到Sierra时其行为没有改变,这与所声称的相反。
其他应用程序未接收到的击键,因为一旦应用程序位于后台,出于独立原因,不再调用负责用上述代码发送键盘事件的函数。

关于swift - 在macOS Sierra中使用Quartz事件模拟击键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39647443/

10-10 09:02