我想在 Mac OS 上的应用程序中模拟媒体按键。我在 Mojave 10.14.4 上的 Xcode 10 中使用 Swift
使用诸如Simulate keypress using Swift之类的答案,我可以模拟各种键,但不能模拟媒体传输键(播放/暂停、VolumeUp 等)。
import Carbon.HIToolbox.Events
@IBAction func buttonPressed(_ sender: AnyObject) {
//let keyCode = CGKeyCode(kVK_F11)
let keyCode = CGKeyCode(kVK_VolumeUp)
let keySource = CGEventSource(stateID: .hidSystemState)
let keyDownEvent = CGEvent(keyboardEventSource: keySource,
virtualKey: keyCode,
keyDown: true)
//keyDownEvent?.flags = .maskCommand
//keyDownEvent?.flags = .maskControl
//keyDownEvent?.flags = .maskAlternate
//keyDownEvent?.flags = .maskSecondaryFn
//keyDownEvent?.flags = .maskShift
//keyDownEvent?.flags = .maskNumericPad
//keyDownEvent?.flags = .maskHelp
let keyUpEvent = CGEvent(keyboardEventSource: keySource,
virtualKey: keyCode,
keyDown: false)
keyDownEvent?.post(tap: .cghidEventTap)
keyUpEvent?.post(tap: .cghidEventTap)
}
如果我为键 kVK_F11(默认为 VolumeUp 键)创建一个事件,它会执行其非媒体功能,即导致所有窗口逃到屏幕边缘。我确实在 keyDown 事件上尝试了不同的标志修饰符,但无济于事。
有没有办法以编程方式为 Play/Pause、VolumeUp/Down 等生成按键事件?