0

我想在 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 等生成按键事件?

4

1 回答 1

0

https://stackoverflow.com/users/4244136/willeke在上面的评论中建议的重复问题模拟 Mac 上的媒体按键,包括我的问题的 python 解决方案。我将它翻译成 Swift 并在那里发布了工作代码。谢谢!

于 2019-04-25T16:45:44.727 回答