Как установить положение курсора мыши в C на Linux?

как я могу установить положение курсора мыши в X-окне с помощью программы C в соответствии с Linux? спасибо :) (как setcursorpos () в WIN)

Править: Я попробовал этот код, но не работает:

#include <curses.h>

main(){
 move(100, 100);
 refresh();
}
21
задан Calmarius 12 February 2014 в 17:52
поделиться

5 ответов

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.
33
ответ дан 29 November 2019 в 06:44
поделиться

Вы хотите написать программу X11 , которая использует функцию call XWarpPointer для перемещения точки в относительную или глобальную позицию. (Руководство по программированию Xlib, том 1)

В общем, использование Xlib для программирования системы X Window является самым базовым и довольно низкоуровневым интерфейсом для графического программирования в системе Unix или Linux. Большинство приложений, разрабатываемых в настоящее время, используют библиотеки более высокого уровня, такие как GTK или Qt , для разработки своих приложений с графическим интерфейсом пользователя.

Curses или NCurses (New Curses) предназначены для программирования терминально-ориентированных интерфейсов, поэтому в данном случае они не используются.

5
ответ дан 29 November 2019 в 06:44
поделиться

Вы можете использовать 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;
3
ответ дан 29 November 2019 в 06:44
поделиться

Все современные терминалы должны поддерживать управляющие последовательности ANSI . Однако для чего-то более сложного (и более переносимого) вам следует изучить возможность использования такой библиотеки, как ncurses .

2
ответ дан 29 November 2019 в 06:44
поделиться

Это старый, но на тот случай, если кто-то еще столкнется с этой проблемой. Ответ, предоставленный 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;}
11
ответ дан 29 November 2019 в 06:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: