gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:03:58 25 4
gpt4 key购买 nike

这可以是一些示例 C 代码,也可以是一个实用程序,可以向我显示 gui 或在控制台上,这并不重要,但我必须能够“命令”它以精确的位置获取坐标时间使得 xev 不是很有用(我可以弄清楚)。

最佳答案

无论如何,我都不是 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;
}

关于xorg - 如何获取当前鼠标(指针)在 X 中的位置坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3585871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com