как я могу установить положение курсора мыши в X-окне с помощью программы C в соответствии с Linux? спасибо :) (как setcursorpos () в WIN)
Править: Я попробовал этот код, но не работает:
#include <curses.h>
main(){
move(100, 100);
refresh();
}
12.4 - Перемещение указателя
Хотя перемещение указателя обычно следует оставить под управление конечного пользователя, иногда необходимо переместить указатель на новую позицию под управлением программы.
Чтобы переместить указатель на произвольную точку в окне, используйте XWarpPointer () .
Пример:
Display *dpy;
Window root_window;
dpy = XOpenDisplay(0);
root_window = XRootWindow(dpy, 0);
XSelectInput(dpy, root_window, KeyReleaseMask);
XWarpPointer(dpy, None, root_window, 0, 0, 0, 0, 100, 100);
XFlush(dpy); // Flushes the output buffer, therefore updates the cursor's position. Thanks to Achernar.
Вы хотите написать программу X11 , которая использует функцию call XWarpPointer
для перемещения точки в относительную или глобальную позицию. (Руководство по программированию Xlib, том 1)
В общем, использование Xlib для программирования системы X Window является самым базовым и довольно низкоуровневым интерфейсом для графического программирования в системе Unix или Linux. Большинство приложений, разрабатываемых в настоящее время, используют библиотеки более высокого уровня, такие как GTK или Qt , для разработки своих приложений с графическим интерфейсом пользователя.
Curses или NCurses (New Curses) предназначены для программирования терминально-ориентированных интерфейсов, поэтому в данном случае они не используются.
Вы можете использовать XWarpPointer для перемещения курсора мыши в окне X.
XWarpPointer(display, src_w, dest_w, src_x, src_y, src_width, src_height, dest_x,
dest_y)
Display *display;
Window src_w, dest_w;
int src_x, src_y;
unsigned int src_width, src_height;
int dest_x, dest_y;
Все современные терминалы должны поддерживать управляющие последовательности ANSI . Однако для чего-то более сложного (и более переносимого) вам следует изучить возможность использования такой библиотеки, как ncurses .
Это старый, но на тот случай, если кто-то еще столкнется с этой проблемой. Ответ, предоставленный tusbar, был правильным, но команда XFlush (dpy) должна быть добавлена в конце, чтобы обновить положение курсора. Необходимые библиотеки: X11 / X.h, X11 / Xlib.h, X11 / Xutil.h.
int main(int argc, char *argv[]){
//Get system window
Display *dpy;
Window root_window;
dpy = XOpenDisplay(0);
root_window = XRootWindow(dpy, 0);
XSelectInput(dpy, root_window, KeyReleaseMask);
XWarpPointer(dpy, None, root_window, 0, 0, 0, 0, 100, 100);
XFlush(dpy);
return 0;}