gpt4 book ai didi

c++ - linux下keycode是否一致

转载 作者:太空狗 更新时间:2023-10-29 12:21:05 25 4
gpt4 key购买 nike

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

为了模拟按键,我使用了 X11 库中的 XTestFakeKeyEvent 函数。我在这里找到了一个工作示例:Simulate keypress in a Linux C console application

我的问题是,我打算模拟的那些特殊键无法在 keysymdef.h 文件中找到,其中使用的 XKeysymToKeycode 的常量-功能已定义。

所以,我做了一点调查,发现 this post , 这把我带到了 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 用于播放/暂停)作为 XTestFakeKeyEvent 的键码 - 我让它工作了:

// Simulate Key-Press:
Display *display;
display = XOpenDisplay(NULL);

XTestFakeKeyEvent(display, 172, true, 0);
XTestFakeKeyEvent(display, 172, false, 0);
XFlush(display);

现在,我的问题是:

我能否依靠这些值(整数)映射到每个 Linux 系统上的这些键?如果不是(这是我的猜测),动态(在代码中)获取正确映射的正确方法是什么?

最佳答案

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

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

编辑:

我实际上查看了我的旧项目,看起来我使用这些函数来获取实际的键码:

XStringToKeysym()
XKeysymToKeycode()

查看 MAN 页面,它们非常不言自明。

我希望这对您有所帮助:)

关于c++ - linux下keycode是否一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8333474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com