Window 的 GetAsyncKeyState 的 Linux 等价物是什么?

ajf*_*w.s 6 c++ linux keyboard

我正在使用 C++,我需要确定是否按下了 shift 键。在 Windows 中,我可以只使用 GetAsyncKeyState。我怎样才能在 Linux 中做到这一点?我无法以 root 身份运行。

Dav*_*lor 1

在X Windows下,您可以加载X键盘扩展并调用XkbGetState()以获取当前键盘状态。如果按下 Shift 键,则由 所设置的结构base_mods字段将设置位。完整文档位于:https://www.x.org/releases/X11R7.7/doc/libX11/XKB/xkblib.html#Determining_Keyboard_StateXkbStateRecXkbGetState()ShiftMask

XkbEvent这是一个同步调用,但您可以通过调用 来请求在键盘状态的某些方面发生变化时发送事件XkbSelectEventDetails()。还有其他几种方法可以异步接收键盘事件,但在这里,您感兴趣的是何时按下或释放 Shift 键,这在修饰符字段中报告为位掩码。

或者:https ://stackoverflow.com/a/4225290/4474419