在 MacOS 中模拟媒体键按下
Simulate Media-Key press in MacOS
我想在 Mac OS 上的应用程序中模拟媒体按键。我在 Mojave 10.14.4
上的 Xcode 10 中使用 Swift
使用诸如 Simulate keypress using Swift 之类的答案我可以模拟各种键,但不能模拟媒体传输键(play/pause、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 键)创建一个事件,它会执行其非媒体功能,即导致所有 windows 逃到边缘屏幕。我确实在 keyDown 事件上尝试了不同的标志修饰符,但无济于事。
有没有办法以编程方式为 Play/Pause、VolumeUp/Down 等生成按键事件?
上面评论中建议的重复问题 emulate media key press on Mac identified by https://whosebug.com/users/4244136/willeke 包括对我的问题的 python 解决方案。我将其翻译成 Swift 并在那里发布了工作代码。谢谢!
我想在 Mac OS 上的应用程序中模拟媒体按键。我在 Mojave 10.14.4
上的 Xcode 10 中使用 Swift使用诸如 Simulate keypress using Swift 之类的答案我可以模拟各种键,但不能模拟媒体传输键(play/pause、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 键)创建一个事件,它会执行其非媒体功能,即导致所有 windows 逃到边缘屏幕。我确实在 keyDown 事件上尝试了不同的标志修饰符,但无济于事。
有没有办法以编程方式为 Play/Pause、VolumeUp/Down 等生成按键事件?
上面评论中建议的重复问题 emulate media key press on Mac identified by https://whosebug.com/users/4244136/willeke 包括对我的问题的 python 解决方案。我将其翻译成 Swift 并在那里发布了工作代码。谢谢!