【发布时间】:2018-10-14 10:03:36
【问题描述】:
我认为这应该是一个简单的问题,但我google了很长时间,发现所有解决方案都在windows中,所以我在linux c++中给出了我的解决方案,希望下次我忘记这个问题时,我能找到答案
【问题讨论】:
我认为这应该是一个简单的问题,但我google了很长时间,发现所有解决方案都在windows中,所以我在linux c++中给出了我的解决方案,希望下次我忘记这个问题时,我能找到答案
【问题讨论】:
#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);
};
【讨论】: