我想知道如何使用Xlib在屏幕上的任何位置獲得鼠標點擊的x和y座標。我發現這個職位它獲取當前指針位置獲取與Xlib的鼠標點擊座標
How can I get the current mouse (pointer) position co-ordinates in X,
,但我不知道如何因此它的點擊鼠標時的X,Y座標進行修改。 我試過寫這段代碼,但它什麼也沒做。
#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;
}
事件可能發送到其他窗口,這就是它不工作的原因。另一個問題是,當我添加ButtonPressMask到XSelectInput功能我得到以下錯誤:
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做到這一點,我很高興聽到這個消息。
謝謝,代碼對我來說工作正常,但我必須更改爲ButtonRelease,否則我會得到與上述相同的錯誤。你不知道爲什麼? – rex123 2013-04-21 15:51:01
這兩個事件都爲我工作。你在使用哪個窗口管理器?我正在使用KDE窗口管理器。 – parkydr 2013-04-21 15:58:20
我正在使用統一。 – rex123 2013-04-21 18:36:02