私は現在、マルチメディア キーの 1 つでキーを押すことをエミュレートする小さな C/C++ プログラムを作成しようとしています (「一時停止/再生」など)。
キープレスをシミュレートするために、 -library のXTestFakeKeyEvent
-functionを使用しました。X11
SO: Simulate keypress in a Linux C console application で実際の例を見つけました
私の問題は、シミュレートしようとしている特殊キーがkeysymdef.h
、使用される関数の定数XKeysymToKeycode
が定義されているファイルに見つからないことです。
それで、私は少し調査を行い、この投稿を見つけて、xmodmap
-commandにたどり着きました。を使用xmodmap -pk
して、これらのキーを含むリストを取得しました:
KeyCode Keysym (Keysym) ...
Value Value (Name) ...
[...]
171 0x1008ff17 (XF86AudioNext) 0x0000 (NoSymbol) 0x1008ff17 (XF86AudioNext)
172 0x1008ff14 (XF86AudioPlay) 0x1008ff31 (XF86AudioPause) 0x1008ff14 (XF86AudioPlay) 0x1008ff31 (XF86AudioPause)
173 0x1008ff16 (XF86AudioPrev) 0x0000 (NoSymbol) 0x1008ff16 (XF86AudioPrev)
174 0x1008ff15 (XF86AudioStop) 0x1008ff2c (XF86Eject) 0x1008ff15 (XF86AudioStop) 0x1008ff2c (XF86Eject)
[...]
これらの定義された値 (172
再生/一時停止など) を -function のキーコードとして使用すると、XTestFakeKeyEvent
機能するようになりました。
// Simulate Key-Press:
Display *display;
display = XOpenDisplay(NULL);
XTestFakeKeyEvent(display, 172, true, 0);
XTestFakeKeyEvent(display, 172, false, 0);
XFlush(display);
さて、私の質問は次のとおりです。
これらの値 (整数) を信頼して、すべての Linux システムでこれらのキーにマップすることはできますか? そうでない場合 (これは私が推測することです)、正しいマッピングを動的に (コードで) 取得する適切な方法は何でしょうか?