我正在尝试编写小型 C++ 程序,它应该检测用户是否按下键盘上的任意键或移动鼠标。我需要在 Ubuntu 或 Centos 上运行的那个程序。这就是我使用 X11 库进行按键检测的原因。
这是我用谷歌搜索的代码:
#include <stdio.h>
#include <cstring>
#include <iostream>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
using namespace std;
int main(void)
{
Display * dpy = XOpenDisplay(0x0);
XEvent ev;
if(!dpy) return 1;
Time t = CurrentTime;
XGrabKeyboard(dpy, DefaultRootWindow(dpy), false,
GrabModeAsync, GrabModeAsync,t);
for(;;)
{
//XGrabKeyboard(dpy, DefaultRootWindow(dpy), false,
// GrabModeAsync, GrabModeAsync,t);
XNextEvent(dpy, &ev);
if(ev.type == KeyPress)
cout << "Key pressed" << endl;
// XGrabKeyboard(dpy, DefaultRootWindow(dpy), false,
// GrabModeAsync, GrabModeAsync,t);
}
}
它运作良好,但不适合我。它锁定键盘以在所有窗口中输入,除了它自己的程序(取消注释循环中的第一行和最后一行给了我相同的结果)。
也许有人知道我该如何修复它或者我可以使用什么库。
谢谢。