В настоящее время я пытаюсь создать небольшую программу на C / C ++, которая имитирует нажатие клавиши на одной из мультимедийных клавиш (например, «Пауза / Воспроизведение»).
Для имитации нажатия клавиш я использовал функцию XTestFakeKeyEvent
из библиотеки X11
. Я нашел рабочий пример здесь на SO: Имитация нажатия клавиш в консольном приложении Linux C
Моя проблема в том, что те специальные ключи, которые я собираюсь смоделировать, не найдены в keysymdef.h
-файле, где определены константы для используемой XKeysymToKeycode
-функции.
Итак, я провел небольшое исследование и нашел этот пост , который привел меня к xmodmap
-команде . Используя 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
для воспроизведения / паузы) в качестве кодов клавиш для функции XTestFakeKeyEvent
, я получил его на работу:
// Simulate Key-Press:
Display *display;
display = XOpenDisplay(NULL);
XTestFakeKeyEvent(display, 172, true, 0);
XTestFakeKeyEvent(display, 172, false, 0);
XFlush(display);
Теперь мой вопрос:
Могу ли я рассчитывать на то, что эти значения (целые числа) будут сопоставлены с этими ключами в каждой системе Linux? Если нет (что я и предполагаю), каков будет правильный способ динамического получения правильных отображений (в коде)?