2012-01-07 23 views
7

Todo,¿Cómo simulamos un clic del mouse con Xlib/C?

No puedo creer que esta pregunta haya sido tan difícil de responder como lo es. He estado buscando en Google durante las últimas dos horas y no puedo encontrar nada que funcione. Todo lo que quiero hacer es buscar el código de C/Xorg para 'ingresar' y hacer clic con el botón izquierdo del mouse. Esperaría una sola línea de código pero las únicas cosas que he encontrado escritas en C son unas dos docenas de líneas y no funcionan de todos modos :(Parece que se puede hacer en Windows, pero estoy en Linux

El motivo de la pregunta es que he escrito una utilidad que me permite mover el puntero del mouse entre varias pantallas con el teclado. El único problema es que si me muevo a una ubicación donde abc solía estar la ventana, pero otra ventana xyz ha sido cargada encima de esa misma ubicación, el puntero del mouse se mueve a xyz muy bien, pero xyz no tiene foco, hasta que deje clic con el mouse. Entonces, quiero construir el 'clic' en mi código

El código que probé que no funcionó se basó en XSendEvent().

+0

+1 por incluir el ** motivo ** en el que desea hacer esto. –

+0

si no desea alcanzar el mouse, debería considerar usar un administrador de ventanas que admita este tipo de cosas. Puedo recomendar xmonad, pero hay otros. –

Respuesta

2

¿Por qué no simplemente elevar/enfocar directamente la ventana en lugar de tratar de hacer un evento de clic falso? Eso debería ser mucho más confiable y trabajar con todos los administradores de ventanas, incluso sin clic para enfocar.

+0

R: El objetivo del ejercicio es poder moverse entre pantallas w.o. tener que tocar el mouse, así que si puedo mover el puntero a través de KB, pero tengo que alcanzar el mouse para hacer clic izquierdo de todos modos, entonces todo se vuelve un poco inútil. Por supuesto, no hay ningún problema al pasar de una ventana a otra en la misma pantalla, pero cuando intento pasar de una pantalla a otra, no hay un acceso directo integrado que pueda encontrar. –

+0

Mueva el puntero del mouse mientras lo hace, pero luego envíe un aumento/enfoque en lugar de hacer clic. –

+0

¡Buena idea! Parece que Alt + Esc lo hace. Ahora solo necesito saber cómo enviar eso. –

2

Sí, he llegado más o menos a comprender. De todos modos parece que esta es la forma:

{ 
#include <X11/extensions/XTest.h> 
XTestFakeButtonEvent(display, 1, True, CurrentTime); 
XTestFakeButtonEvent(display, 1, False, CurrentTime); 
XFlush(display); 
} 

... y añadir "-lXtst" a la línea LDFLAGS en el Makefile.

Xlib parece ser tan sangriento difícil. He tenido consejos para usar otras bibliotecas, ojalá supiera cómo cambiar.

Gracias R.

2

xdotool es la manera más fácil de hacer esto. Es una herramienta de línea de comando. Puedes usarlo en scripts simples. Por ejemplo:

#!/bin/sh 
xdotool mousemove x y 
xdotool click 1 
+0

Gracias, ese es un programa interesante, se ve mejor que mi 'movimiento', aunque el mío es quizás mejor para el movimiento del mouse simple en el fondo. –

Cuestiones relacionadas