如何确定在Linux上的C ++中是否按下了键盘键

时间:2018-10-14 10:03:37

标签: c++ linux keypress

我认为这应该是一个简单的问题,但是我在Google上搜索了很长时间,发现所有解决方案都在Windows中,所以我在linux c ++中给出了我的解决方案,希望下次我忘记这个问题时,可以找到答案

1 个答案:

答案 0 :(得分:0)

#include <X11/Xlib.h>
#include <iostream>
#include "X11/keysym.h"

/**
 *
 * @param ks  like XK_Shift_L, see /usr/include/X11/keysymdef.h
 * @return
 */
bool key_is_pressed(KeySym ks) {
    Display *dpy = XOpenDisplay(":0");
    char keys_return[32];
    XQueryKeymap(dpy, keys_return);
    KeyCode kc2 = XKeysymToKeycode(dpy, ks);
    bool isPressed = !!(keys_return[kc2 >> 3] & (1 << (kc2 & 7)));
    XCloseDisplay(dpy);
    return isPressed;
}

bool ctrl_is_pressed() {
    return key_is_pressed(XK_Control_L) || key_is_pressed(XK_Control_R);
}

int main(int argc, char **argv) {
    std::cout << ctrl_is_pressed() << std::endl;
    return (0);
};