我目前正在尝试创建一个小的 C/C++ 程序,它模拟一个多媒体键(例如“暂停/播放”)上的按键。
为了模拟按键,我使用了-library 中的XTestFakeKeyEvent
-function 。X11
我在 SO 上找到了一个工作示例:Simulate keypress in a Linux C console application
我的问题是,我打算模拟的那些特殊键在keysymdef.h
-file 中找不到,其中XKeysymToKeycode
定义了使用的 -function 的常量。
所以,我做了一点研究,发现了这篇文章,它把我带到了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 系统上的这些键吗?如果不是(这是我的猜测),那么动态(在代码中)获取正确映射的正确方法是什么?