这可以是一些示例C代码或一个实用程序,它会向我显示gui或在控制台上它并不重要,但我必须能够“命令”它以准确地获取坐标使xev不太有用的时间(我可以弄清楚)。
答案 0 :(得分: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;
}
答案 1 :(得分:9)
答案 2 :(得分:1)
实际上,如果你使用xwininfo获取窗口id,xev非常有用,那么它可以轻松地为你完成这项任务。毫无疑问,更优雅的解决方案可行,但它确实有效。
答案 3 :(得分:0)
此行有错误
root_windows = malloc(sizeof(Window) * number_of_screens);
将其更改为:
root_windows = (Window *)malloc(sizeof(Window) * number_of_screens);