2012-01-07 19 views
7

Tutti,Come simulare un clic del mouse con Xlib/C?

Non riesco a credere che questa domanda sia stata così difficile da rispondere come è. Sono stato su Google per le ultime due ore e non riesco a trovare nulla che funzioni. Tutto quello che voglio fare è trovare il codice C/Xorg per "entrare" con un clic del tasto sinistro del mouse. Mi aspetterei una singola riga di codice, ma le uniche cose che ho trovato scritte in C sono circa due dozzine di righe e non funzionano comunque :(Sembra che possa essere fatto in Windows, ma sono in Linux

Il motivo della domanda è che ho scritto un'utilità che mi consente di spostare il puntatore del mouse tra più schermate utilizzando la tastiera. L'unico problema è che se mi sposto in una posizione in cui la finestra abc era solo un'altra finestra xyz è stata caricata in cima alla stessa posizione, il puntatore del mouse si sposta su xyz bene, ma xyz non ha lo stato attivo - fino a quando non ho lasciato clic con il mouse. Quindi, voglio creare il "click" nel mio codice

Il codice che ho provato non funzionava era basato su XSendEvent().

+0

+1 per includere il ** motivo ** che si desidera eseguire. –

+0

se non si desidera raggiungere il mouse, si dovrebbe prendere in considerazione l'utilizzo di un gestore di finestre che supporta questo tipo di cose. Posso raccomandare xmonad, ma ce ne sono altri. –

risposta

2

Perché non solo aumentare/mettere a fuoco direttamente la finestra invece di provare a fare un evento falso? Questo dovrebbe essere molto più affidabile e funzionare con tutti i gestori di finestre, anche con quelli non a click-to-focus.

+0

R: L'intero punto dell'esercitazione per essere in grado di spostarsi tra gli schermi w.o. dovendo toccare il mouse, quindi se posso spostare il puntatore tramite KB, ma devo comunque raggiungere il mouse con il tasto sinistro del mouse, allora l'intera cosa diventa un po 'inutile. Naturalmente non c'è alcun problema quando ci si sposta da una finestra all'altra dello stesso schermo, ma quando si cerca di passare da una schermata all'altra, non è presente una scorciatoia integrata che riesca a trovare. –

+0

Spostare il puntatore del mouse mentre si sta eseguendo, ma quindi inviare un aumento/messa a fuoco anziché fare clic. –

+0

Buona idea! Sembra che Alt + Esc lo faccia. Ora ho solo bisogno di sapere come inviarlo. –

2

Sì, ho più o meno capito. In ogni caso sembra che questo sia il modo:

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

... e aggiungere "-lXtst" alla riga LDFLAGS nel Makefile.

Xlib sembra essere così maledettamente difficile. Ho avuto consigli di usare altre biblioteche, vorrei sapere come procedere per cambiare.

Grazie R.

2

xdotool è il modo più semplice di fare questo. È uno strumento da riga di comando. Puoi usarlo in semplici script. Ad esempio:

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

Grazie, questo è un programma interessante, sembra migliore del mio "movemouse", il mio è forse meglio per il semplice movimento del mouse. –

Problemi correlati