メディアキーとは
ここでメディアキーと呼んでいるのは、キーボードの最上段にある↓このキーのことです。
メディアキーをプログラムから入力するコードは以下の通り。
メディアキー入力
func HIDPostMediaKey(_ key: Int32) {
func doMediaKey(_ key: Int, down: Bool) {
let modifierFlags = NSEvent.ModifierFlags(rawValue: down ? 0xA00 : 0xB00)
let nsEvent = NSEvent.otherEvent(with: .systemDefined, location: NSPoint(x: 0, y: 0), modifierFlags: modifierFlags, timestamp: 0, windowNumber: 0, context: nil, subtype: 8, data1: (key << 16) | ((down ? 0xA : 0xB) << 8), data2: -1)
let cgEvent = nsEvent?.cgEvent
cgEvent?.post(tap: .cghidEventTap)
}
doMediaKey(Int(key), down: true) //key press
doMediaKey(Int(key), down: false) //key release
}
使い方は簡単で、引数にキータイプを指定するだけ。例えば、音量アップならNX_KEYTYPE_SOUND_UP
を指定する。
音量アップ
HIDPostMediaKey(NX_KEYTYPE_SOUND_UP)
引数で指定するキータイプは、下記の通り。
キー | キータイプ定数 |
---|---|
![]() |
NX_KEYTYPE_BRIGHTNESS_DOWN |
![]() |
NX_KEYTYPE_BRIGHTNESS_UP |
![]() |
NX_KEYTYPE_REWIND |
![]() |
NX_KEYTYPE_PLAY |
![]() |
NX_KEYTYPE_FAST |
![]() |
NX_KEYTYPE_MUTE |
![]() |
NX_KEYTYPE_SOUND_DOWN |
![]() |
NX_KEYTYPE_SOUND_UP |
![]() |
NX_KEYTYPE_EJECT |
上のものも含めて、キータイプは下記の通り記述されている。いくつか試したが、機能しているかどうか確認できなかったものが多かった。
IOKit.hidsystem
public var NX_NOSPECIALKEY: Int32 { get }
public var NX_KEYTYPE_SOUND_UP: Int32 { get }
public var NX_KEYTYPE_SOUND_DOWN: Int32 { get }
public var NX_KEYTYPE_BRIGHTNESS_UP: Int32 { get }
public var NX_KEYTYPE_BRIGHTNESS_DOWN: Int32 { get }
public var NX_KEYTYPE_CAPS_LOCK: Int32 { get }
public var NX_KEYTYPE_HELP: Int32 { get }
public var NX_POWER_KEY: Int32 { get }
public var NX_KEYTYPE_MUTE: Int32 { get }
public var NX_UP_ARROW_KEY: Int32 { get }
public var NX_DOWN_ARROW_KEY: Int32 { get }
public var NX_KEYTYPE_NUM_LOCK: Int32 { get }
public var NX_KEYTYPE_CONTRAST_UP: Int32 { get }
public var NX_KEYTYPE_CONTRAST_DOWN: Int32 { get }
public var NX_KEYTYPE_LAUNCH_PANEL: Int32 { get }
public var NX_KEYTYPE_EJECT: Int32 { get }
public var NX_KEYTYPE_VIDMIRROR: Int32 { get }
public var NX_KEYTYPE_PLAY: Int32 { get }
public var NX_KEYTYPE_NEXT: Int32 { get }
public var NX_KEYTYPE_PREVIOUS: Int32 { get }
public var NX_KEYTYPE_FAST: Int32 { get }
public var NX_KEYTYPE_REWIND: Int32 { get }
public var NX_KEYTYPE_ILLUMINATION_UP: Int32 { get }
public var NX_KEYTYPE_ILLUMINATION_DOWN: Int32 { get }
public var NX_KEYTYPE_ILLUMINATION_TOGGLE: Int32 { get }
このファイルの定数をSwiftで宣言しただけと思われる。(NeXTが懐かしい)
なお、上記のコードをはじめて実行すると、システム環境設定のプライバシーが開くので、該当appにアクセシビリティの制御許可を与える必要があります。
インテルMacbook Pro / macOS 11.6 / Xcode 13.1 / Swift 5.5.1 で動作確認済み
参考
- 以下のPythonコードを参考にした。
- キーボードとマウスのエミュレート方法は↓この記事にあります。