2012-01-09 10 views
7

¿Cómo puedo enviar un evento de pulsación de tecla o liberación de tecla a una ventana (la ventana actualmente activa) de otro programa usando XCB?¿Cómo enviar evento clave a la aplicación utilizando XCB?

Encontré algunos tutoriales usando XLib, pero me gustaría usar XCB.

Supongo que tendré que llamar al xcb_send_event, sin embargo, no tengo idea de cómo pasarlo como parámetros.

+0

Debería tener en cuenta que la mayoría de las aplicaciones bloquean send_events() ya que es una seguridad flagrante. En los primeros días de X11 lo usamos para escribir en otros usuarios xterms. :-) –

+0

Estoy intentando grabar mis pulsaciones de teclas y luego volver a reproducirlas, es decir, grabar macros para ahorrar tiempo. – ar31

+0

Lo mejor es hacerlo en el nivel de aplicación que bajo nivel en X11. –

Respuesta

7

Debería poder usar la extensión XTEST para falsificar la entrada a la ventana activa, usando la función 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); 

Véase el xte program in xcb/demos para un ejemplo de trabajo.

+0

¡Gracias por compartir esto! La mayoría de las aplicaciones están bloqueando los sonidos 'send_event' y' test_fake_input' como lo hace el truco. compilar con g ++ ¿hay algo que incluir? Actualmente compilo con 'g ++ main.cc -o trigger -std = C++ 11 -lxcb'. ¡Gracias! – Noitidart

Cuestiones relacionadas