2012-01-09 7 views
7

Come posso inviare una pressione di un tasto o un evento di rilascio chiave a una finestra (la finestra attualmente attiva) da un altro programma usando XCB?Come inviare un evento chiave all'applicazione utilizzando XCB?

Ho trovato alcuni tutorial utilizzando XLib, tuttavia mi piacerebbe utilizzare XCB.

Suppongo che dovrò chiamare xcb_send_event, tuttavia non ho idea di cosa passare come parametri.

+0

Si noti che la maggior parte delle applicazioni blocca send_events() in quanto è una completa protezione. Nei primi X11 giorni lo usavamo per digitare in altri utenti xterms. :-) –

+0

Sto provando a registrare i miei tasti e poi li suono di nuovo, ad esempio registrando i macro per risparmiare tempo. – ar31

+0

È meglio fare a livello di applicazione rispetto al basso livello di X11. –

risposta

7

Dovresti essere in grado di utilizzare l'estensione XTEST per falso input alla finestra attiva, utilizzando la funzione xcb_test_fake_input().

#include <xcb/xtest.h> 
... 
xcb_test_fake_input(c, XCB_KEY_PRESS, keycode, XCB_CURRENT_TIME, XCB_NONE, 0, 0, 0); 
xcb_test_fake_input(c, XCB_KEY_RELEASE, keycode, XCB_CURRENT_TIME, XCB_NONE, 0, 0, 0); 

Vedere la xte program in xcb/demos per un esempio di lavoro.

+0

Grazie per aver condiviso questo! La maggior parte delle app blocca 'send_event' e' test_fake_input' suona come se fosse il trucco. compilare con g ++ c'è qualcosa da includere? Attualmente sto compilando con 'g ++ main.cc -o trigger -std = C++ 11 -lxcb'. Grazie! – Noitidart

Problemi correlati