macos - 在 Mac 上模拟媒体按键

标签 macos keyevent

有没有办法在普通 Apple 笔记本电脑上模拟媒体键(音量增大/减小、播放、暂停、上一个、下一个)的按键?

如何?

最佳答案

这需要一些时间和许多技巧(尝试使用 ctypes、IOKit 原生界面、Quartz 和/或 Cocoa)。现在这似乎是一个简单的解决方案:

#!/usr/bin/python

import Quartz

# NSEvent.h
NSSystemDefined = 14

# hidsystem/ev_keymap.h
NX_KEYTYPE_SOUND_UP = 0
NX_KEYTYPE_SOUND_DOWN = 1
NX_KEYTYPE_PLAY = 16
NX_KEYTYPE_NEXT = 17
NX_KEYTYPE_PREVIOUS = 18
NX_KEYTYPE_FAST = 19
NX_KEYTYPE_REWIND = 20

def HIDPostAuxKey(key):
    def doKey(down):
        ev = Quartz.NSEvent.otherEventWithType_location_modifierFlags_timestamp_windowNumber_context_subtype_data1_data2_(
            NSSystemDefined, # type
            (0,0), # location
            0xa00 if down else 0xb00, # flags
            0, # timestamp
            0, # window
            0, # ctx
            8, # subtype
            (key << 16) | ((0xa if down else 0xb) << 8), # data1
            -1 # data2
            )
        cev = ev.CGEvent()
        Quartz.CGEventPost(0, cev)
    doKey(True)
    doKey(False)

for _ in range(10):
    HIDPostAuxKey(NX_KEYTYPE_SOUND_UP)
HIDPostAuxKey(NX_KEYTYPE_PLAY)

(虽然我现在需要在 Python 中使用它,但我的问题并不是真正与 Python 相关的,当然您可以轻松地将其翻译成任何其他语言,尤其是 ObjC。)

关于macos - 在 Mac 上模拟媒体按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11045814/

相关文章:

macos - 使用 swift 为 NSTextView 设置默认字体

macos - 在Mac OS X Lion中使用gcc而不是llvm-gcc

java - FXML 中的 "Handler method not accessible"错误(仅当我使用 "Event"或 "ActionEvent"参数创建方法时才有效)

C# Windows 窗体 : How to capture Capture Function, 箭头和导航键

android - 按两次电源按钮发送短信

linux - linux shell 和 macos shell 有什么区别?

ios - 在 iOS 和 OSX 上使用 unsigned int 和 unsigned long 编译 NSLog 而没有警告

macos - 从终端使用适用于 Mac 的 Github GUI 和 git

javascript - 模拟退格键功能到向上箭头键事件?

android - 从 Android Activity 中的软件键盘监听 Webview Key Events