我希望了解如何在屏幕上的任何位置使用Xlib获取鼠标单击的x和y坐标。我发现了这篇文章,它可以获取当前指针位置。
如何在X中获取当前鼠标(指针)位置坐标
但我不知道如何修改它以便在鼠标单击时获取x y坐标。
我尝试编写了此代码,但它没有任何作用。
事件可能被发送到其他窗口,这就是它不起作用的原因。另一个问题是当我在XSelectInput函数中添加ButtonPressMask时,会出现以下错误:
如果在C语言中有更简单的方法来实现这个,我很乐意听取。
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
int main (){
int x=-1,y=-1;
XEvent event;
int button;
Display *display = XOpenDisplay(NULL);
if (display == NULL) {
fprintf(stderr, "Cannot connect to X server!\n");
exit (EXIT_FAILURE);
}
Window root= XDefaultRootWindow(display);
XSelectInput(display, root, ButtonReleaseMask) ;
while(1){
XNextEvent(display,&event);
switch(event.type){
case ButtonRelease:
switch(event.xbutton.button){
case Button1:
x=event.xbutton.x;
y=event.xbutton.y;
button=Button1;
break;
case Button3:
x=event.xbutton.x;
y=event.xbutton.y;
button=Button3;
break;
default:
break;
}
break;
default:
break;
}
if(x>=0 && y>=0)break;
}
if(button==Button1)printf("leftclick at %d %d \n",x,y);
else printf("rightclick at %d %d \n",x,y);
XCloseDisplay(display);
return 0;
}
事件可能被发送到其他窗口,这就是它不起作用的原因。另一个问题是当我在XSelectInput函数中添加ButtonPressMask时,会出现以下错误:
X Error of failed request: BadAccess (attempt to access private resource denied)
Major opcode of failed request: 2 (X_ChangeWindowAttributes)
Serial number of failed request: 7
Current serial number in output stream: 7
如果在C语言中有更简单的方法来实现这个,我很乐意听取。