如何在X中获取当前鼠标(指针)位置坐标

use*_*403 15 xorg

这可以是一些示例C代码或一个实用程序,它将向我显示gui或在控制台上它并不重要,但我必须能够"命令"它在准确的时间抓取坐标xev不是很有用(我可以搞清楚).

use*_*403 13

我不是一个C程序员,但我看了几个在线教程,并认为这是你应该如何阅读当前的鼠标位置.这是我自己的代码,之前我没有对Xlib做任何事情,所以它可以完全被破坏(例如,错误处理程序不应该对每个错误都不做任何事情)但是它有效.所以这是另一个解决方案:

#include <X11/Xlib.h>
#include <assert.h>
#include <unistd.h>
#include <stdio.h>
#include <malloc.h>

static int _XlibErrorHandler(Display *display, XErrorEvent *event) {
    fprintf(stderr, "An error occured detecting the mouse position\n");
    return True;
}

int main(void) {
    int number_of_screens;
    int i;
    Bool result;
    Window *root_windows;
    Window window_returned;
    int root_x, root_y;
    int win_x, win_y;
    unsigned int mask_return;

    Display *display = XOpenDisplay(NULL);
    assert(display);
    XSetErrorHandler(_XlibErrorHandler);
    number_of_screens = XScreenCount(display);
    fprintf(stderr, "There are %d screens available in this X session\n", number_of_screens);
    root_windows = malloc(sizeof(Window) * number_of_screens);
    for (i = 0; i < number_of_screens; i++) {
        root_windows[i] = XRootWindow(display, i);
    }
    for (i = 0; i < number_of_screens; i++) {
        result = XQueryPointer(display, root_windows[i], &window_returned,
                &window_returned, &root_x, &root_y, &win_x, &win_y,
                &mask_return);
        if (result == True) {
            break;
        }
    }
    if (result != True) {
        fprintf(stderr, "No mouse found.\n");
        return -1;
    }
    printf("Mouse is at (%d,%d)\n", root_x, root_y);

    free(root_windows);
    XCloseDisplay(display);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 也许这会省一些时间:要编译它,将它保存在pointerposition.c下并运行:`gcc pointerposition.c -o pointerposition -lX11` (3认同)

小智 10

xdotool可能是最好的工具.

对于C,您可以使用libxdo.

  • 作为“xdotool”的示例,“xdotool getmouselocation”给我“x:1973 y:54 screen:0 window:8389001”。 (2认同)