Как установить положение курсора мыши в C на linux?
Как я могу установить мышь положение курсора в окне X с помощью программы C под Linux? спасибо :) (как setcursorpos () в WIN)
изменить: Я пробовал этот код, но не работает:
#include <curses.h>
main(){
move(100, 100);
refresh();
}
6 ответов
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.
Это старый, но в случае, если кто-то еще столкнется с этой проблемой. Ответ tusbar был правильным, но команда XFlush(dpy) необходимо добавить в конце, чтобы обновить положение курсора. Необходимые библиотеки: Х11/Х. Ч., Х11/библиотеки 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;}
вы хотите написать программа X11, который использует вызов XWarpPointer
функция для перемещения точки в относительное или глобальное положение. (Руководство По Программированию Xlib, Том 1)
В общем, использование Xlib для программирования системы X Window является самым простым и довольно низкоуровневым интерфейсом для графического программирования в системе Unix или Linux. Большинство приложений, разработанных в настоящее время с использованием библиотеки более высокого уровня, таких как GTK или Qt для разработка их приложений GUI.
Curses или NCurses (новые проклятия) предназначены для программирования терминально-ориентированных интерфейсов, поэтому не полезны в этом случае.
можно использовать 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;
используйте отличную утилиту xdotool от Jordan Sissel.
http://www.semicomplete.com/projects/xdotool/
Он предоставляет функцию оболочки XWarpPointer, такую как xdo_mousemove (), вот пример:
Display *display = NULL;
xdo_t *xdo = NULL;
void mouse_left_down(int x, int y)
{
xdo_mousemove(xdo, x, y, 0)
xdo_mousedown(xdo, CURRENTWINDOW, Button1);
}
void mouse_left_up(int x, int y)
{
xdo_mouseup(xdo, CURRENTWINDOW, Button1, 1, 0);
}
void mouse_left_double_click(int x, int y)
{
xdo_mousemove(xdo, x, y, 0);
xdo_click_multiple(xdo, CURRENTWINDOW, Button1, 1, 0);
doubleclick = TRUE;
}
int main()
{
display = XOpenDisplay(NULL);
if(display == NULL)
{
fprintf(stderr, "can't open display!\n");
return -1;
}
xdo = xdo_new((char*) display);
//some task here
// ...
return 0;
}
все современные терминалы должны поддерживать ANSI escape-последовательности. Для чего-то более сложного (и более портативного), однако, вы должны изучить использование библиотеки, такой как ncurses.