getting mouseclick coordinates with Xlib

前端 未结 3 1857
时光取名叫无心
时光取名叫无心 2020-12-19 20:39

I would like to know how to get the x and y coordinates of a mouseclick with Xlib anywhere on the screen. I\'ve found this post which gets the current pointer position

3条回答
  •  难免孤独
    2020-12-19 20:58

    I know this is a couple years out so this is informational for others coming along. First, using yet another library does not fit my definition of easier. I was working on something that needed this myself using xlib and C only and I wanted to see how simple I could make the code.

    Essentially you only need four lines of code to do this in xlib in an existing program the rest is all in how you want to deal with it, printf/sprintf, grab_pixel_color(Display *display, XColor *color) etc.

    /** gcc position.c -o position -lX11 **/
    #include 
    #include 
    
    int main (int argc, char **argv) {
        Window root_window; //<--one
        int root_x, root_y; //<--two
        unsigned int mask; //<--three
    
        Display *display = XOpenDisplay(NULL);
    
        /*
        Bool XQueryPointer(display, w, root_return, child_return, root_x_return, root_y_return,
                             win_x_return, win_y_return, mask_return)
              Display *display;
              Window w;
              Window *root_return, *child_return;
              int *root_x_return, *root_y_return;
              int *win_x_return, *win_y_return;
              unsigned int *mask_return;
        */
    
        XQueryPointer(display, DefaultRootWindow(display), &root_window, &root_window, &root_x, &root_y, &root_x, &root_y, &mask); //<--four
    
        printf("Mouse coordinates (X: %d, Y: %d)\n", root_x, root_y);
    
        XCloseDisplay(display);
        return 0;
    }
    

    I hope this is useful to someone else.

提交回复
热议问题