我编写了一个简单的程序,它将报告特定窗口的按键和释放事件。就我而言,它主要是终端,因为我从终端调用程序。我能够在终端窗口中获得按键和释放事件(我在终端上使用了 XSelectInput() 和 KeyPressMask 和 KeyReleaseMask),但同样不适用于 ButtonPress 和 ButtonRelease。不仅是这些,而且与鼠标相关的任何事件都不会被报告。知道为什么会这样吗?
#include
#include
#include
#include
#include
#include
int main() {
Display *display = XOpenDisplay(NULL);
KeySym k;
int revert_to;
Window window;
XEvent event;
XGetInputFocus(display, &window, &revert_to);
XSelectInput(display, window, KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask);
while(1)
{
XNextEvent(display,&event);
switch (event.type) {
case KeyPress : printf("Key Pressed\n"); break;
case KeyRelease : printf("Key Released\n"); break;
case ButtonPress : printf("Button Pressed\n"); break;
case ButtonRelease : printf("Button Released\n"); break;
case EnterNotify : printf("Enter\n"); break;
}
}
XCloseDisplay(display);
return 0;
}