Симуляция нажатия Media-Key в MacOS

Я хотел бы имитировать нажатия клавиш мультимедиа из приложения в Mac OS. Я использую Swift в Xcode 10 на Мохаве 10.14.4

Используя такие ответы, как Имитация нажатия клавиш с помощью 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 и т. Д. Программно?

1 ответ

Решение

Предлагаемый повторяющийся вопрос, имитирующий нажатие клавиши мультимедиа на Mac, указанный в Willeke в комментариях выше, включает в себя решение Python для моего вопроса. Я перевел его на Swift и разместил там рабочий код. Спасибо!

Другие вопросы по тегам