在 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 并在那里发布了工作代码。谢谢!