在linux下,密码是否一致

时间:2011-11-30 21:54:15

标签: c++ c linux x11 keymapping

我目前正在尝试创建一个小型C / C ++程序,该程序模拟其中一个多媒体键上的按键(例如“暂停/播放”)。

为了模拟按键我使用了XTestFakeKeyEvent - X11 - 函数库中的keysymdef.h函数。我在SO上找到了一个有效的例子:Simulate keypress in a Linux C console application

我的问题是,我打算模拟的那些特殊键不能在XKeysymToKeycode - 文件中找到,其中定义了所使用的xmodmap -pk - 函数的常量。

所以,我做了一些研究,发现了this post,它带我到了xmodmap-command。使用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); - 函数的键代码,我得到了它的工作:

{{1}}

现在,我的问题是:

我可以依赖这些值(整数)映射到每个linux系统上的这些键吗?如果不是(这是我猜的),什么是动态(在代码中)获得正确映射的正确方法?

1 个答案:

答案 0 :(得分:2)

我知道这不是一个明确的答案,但根据我的经验(使用类似项目),我尝试过的每台Linux机器上的键映射都是相同的。这仅适用于具有EN / US键盘布局的机器。我不能谈论具有替代布局的键盘。

如果这不能完全回答你的问题,我很抱歉。

编辑:

我实际上看过我的旧项目,看起来我使用这些函数来获取实际的密钥代码:

XStringToKeysym()
XKeysymToKeycode()

看看MAN页面,它们非常自我解释。

我希望这有助于:)