puntero - ¿Cómo configurar la posición del cursor del mouse en C en linux?
cursores windows 10 (6)
Desea escribir un programa X11 que use la función de llamada XWarpPointer() para mover el punto a una posición relativa o global. (Manual de programación de Xlib, Vol. 1)
En general, el uso de Xlib para programar el sistema X Window es la interfaz más básica y de muy bajo nivel para la programación gráfica en un sistema Unix o Linux. La mayoría de las aplicaciones desarrolladas hoy en día utilizan una biblioteca de nivel superior como GTK o Qt para desarrollar sus aplicaciones GUI.
Curses o NCurses (New Curses) es para programar interfaces orientadas a terminales, por lo que no son útiles en este caso.
¿Cómo puedo configurar la posición del cursor del mouse en una ventana X utilizando un programa C en Linux? gracias :) (como setcursorpos () en WIN)
EDITAR: He intentado este código, pero no funciona:
#include <curses.h>
main(){
move(100, 100);
refresh();
}
Esto es viejo, pero en caso de que alguien más se encuentre con este problema. La respuesta proporcionada por tusbar fue correcta, pero el comando XFlush (dpy) debe agregarse al final para actualizar la posición del cursor. Las bibliotecas necesarias son: X11 / Xh, 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;}
Puede usar XWarpPointer() para mover el cursor del mouse en una ventana 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;
Todos los terminales modernos deben soportar secuencias de escape ANSI . Para algo más complicado (y más portátil), sin embargo, debe considerar el uso de una biblioteca como ncurses .
Utilice la excelente utilidad de Jordan Sissel xdotool.
http://www.semicomplete.com/projects/xdotool/
proporciona la función de envoltura XWarpPointer como xdo_mousemove (), aquí hay algunos ejemplos:
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;
}
12.4 - Moviendo el puntero
Aunque el movimiento del puntero normalmente debe dejarse al control del usuario final, a veces es necesario mover el puntero a una nueva posición bajo el control del programa.
Para mover el puntero a un punto arbitrario en una ventana, use XWarpPointer() .
Ejemplo:
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.