Discussion:
How do I get coordinates or mouse clicks C/C++, Linux?
(too old to reply)
f***@gmail.com
2015-12-13 21:06:36 UTC
Permalink
I have a code which does it, but when it works its difficult to interact with a desktop - I need to click several times on something to access it. (prefer license which will not demand to disclose source code) Here is the link to the code which I use:

#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);
XGrabPointer(display, root, False, ButtonPressMask, GrabModeAsync,
GrabModeAsync, None, None, CurrentTime);

XSelectInput(display, root, ButtonPressMask) ;
while(1){
XNextEvent(display,&event);
switch(event.type){
case ButtonPress:
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;
}
Jasen Betts
2015-12-14 08:33:45 UTC
Permalink
Post by f***@gmail.com
I have a code which does it, but when it works its difficult to
interact with a desktop - I need to click several times on something
to access it. (prefer license which will not demand to disclose source
QT is available for closed source IIRC, might have to pay some.
it's not pure C++ thoough
--
\_(ツ)_
Tauno Voipio
2015-12-14 19:24:53 UTC
Permalink
Post by f***@gmail.com
#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);
XGrabPointer(display, root, False, ButtonPressMask, GrabModeAsync,
GrabModeAsync, None, None, CurrentTime);
XSelectInput(display, root, ButtonPressMask) ;
while(1){
XNextEvent(display,&event);
switch(event.type){
switch(event.xbutton.button){
x=event.xbutton.x;
y=event.xbutton.y;
button=Button1;
break;
x=event.xbutton.x;
y=event.xbutton.y;
button=Button3;
break;
break;
}
break;
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;
}
What are you attempting to achieve?

A clandestine mouse logger?
--
-TV
f***@gmail.com
2015-12-15 10:31:10 UTC
Permalink
Post by Tauno Voipio
Post by f***@gmail.com
#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);
XGrabPointer(display, root, False, ButtonPressMask, GrabModeAsync,
GrabModeAsync, None, None, CurrentTime);
XSelectInput(display, root, ButtonPressMask) ;
while(1){
XNextEvent(display,&event);
switch(event.type){
switch(event.xbutton.button){
x=event.xbutton.x;
y=event.xbutton.y;
button=Button1;
break;
x=event.xbutton.x;
y=event.xbutton.y;
button=Button3;
break;
break;
}
break;
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;
}
What are you attempting to achieve?
A clandestine mouse logger?
--
-TV
I want screenshot of specific part of screen, then OCR recognition.
Loading...