The following is an example of registering location, clicks, and mouse releases:
#include <stdio.h> #include <X11/Xlib.h> char *key_name[] = { "first", "second (or middle)", "third", "fourth", // :D "fivth" // :| }; int main(int argc, char **argv) { Display *display; XEvent xevent; Window window; if( (display = XOpenDisplay(NULL)) == NULL ) return -1; window = DefaultRootWindow(display); XAllowEvents(display, AsyncBoth, CurrentTime); XGrabPointer(display, window, 1, PointerMotionMask | ButtonPressMask | ButtonReleaseMask , GrabModeAsync, GrabModeAsync, None, None, CurrentTime); while(1) { XNextEvent(display, &xevent); switch (xevent.type) { case MotionNotify: printf("Mouse move : [%d, %d]\n", xevent.xmotion.x_root, xevent.xmotion.y_root); break; case ButtonPress: printf("Button pressed : %s\n", key_name[xevent.xbutton.button - 1]); break; case ButtonRelease: printf("Button released : %s\n", key_name[xevent.xbutton.button - 1]); break; } } return 0; }
Compile it using:
$ gcc -lX11 mouse.c -o mouse $ ./mouse Mouse move : [664, 395] Mouse move : [665, 393] Mouse move : [666, 393] Mouse move : [666, 392] Mouse move : [664, 392] Mouse move : [664, 393] Mouse move : [664, 395] Button pressed : first Button released : first Button pressed : third Button released : third ^C $
See also here Key and Pointer Events and there is a lot of information in the Xlib Handbook .
user1129665
source share