この記事は、Zennにも投稿しています。
USB HIDでは
0x80がVolume Up、0x81がVolume Downに割り当てられており、さらに0xEDや0xEEでもVolume UpやDownができそうですが、実はこれらは全て動きません(Windowsでは)。Volume UpやDownを送るためには通常のキーボード用レポートディスクリプタではなく、メディアキー専用のレポートディスクリプタを使うデバイスを作成する必要があります。
他の言語では分かりませんが、Rustでは
usbd_hidを用いることでメディアキー用のレポートを作成することができます。MediaKeyboardReport in usbd_hid::descriptor - Rust
docs.rs
バリアントとして使用可能なのは以下のキーになります。
MediaKey in usbd_hid::descriptor - Rust
docs.rs
抜粋:
デバイスの作成は例えば
embassy_usbでは以下のようになります。メディアキーでは送信できるのは一つのキーのみで、さらに「押されている状態を送信する」通常のキーとは違い「送信するたびに押されたことにする」ようになっているみたいです。