我正在尝试为游戏编写插件,我需要读取鼠标按钮的状态,而不是阻止或“吃掉”事件。由于 root 访问权限,直接读取 /dev/input 不是一个选项。我越接近我需要的是以下代码:
#include <stdio.h>
#include <string.h>
#include <X11/Xlib.h>
int main (int argc, char **argv)
{
Display *display;
XEvent ev;
display = XOpenDisplay(NULL);
Window window = RootWindow(display, XDefaultScreen(display));
XSelectInput(display, window, ButtonPressMask | ButtonReleaseMask);
XGrabButton(display, Button1, AnyModifier, window, False, ButtonPressMask | ButtonReleaseMask, GrabModeSync, GrabModeAsync, None, None);
while(1) {
XAllowEvents(display, ReplayPointer, CurrentTime);
if(XCheckTypedEvent(display, ButtonPress ,&ev))
{
printf("Button pressed\n");
}
else if(XCheckTypedEvent(display, ButtonRelease ,&ev))
{
printf("Button relised\n");
}
}
return 0;
}
问题是,通过设置 GrabModeSync 并将 XAllowEvents 与 ReplayPointer 一起使用,我能够传递事件,但我只能获得 ButtonPress。ButtonRelease 从未被捕获,但我需要它。GrabModeAsync 捕获这两个事件但“吃掉”点击。任何人都可以提出解决方案吗?10倍