2012-01-09 10 views
7

Jak wysłać naciśnięcie klawisza lub wydarzenie zwolnienia klawisza do okna (aktualnie aktywne okno) z innego programu, używając XCB?Jak wysłać kluczowe wydarzenie do aplikacji za pomocą XCB?

Znalazłem kilka samouczków za pomocą XLib, ale chciałbym użyć XCB.

Zgaduję, że będę musiał zadzwonić pod numer xcb_send_event, jednak nie mam pojęcia, co przekazać jako parametry.

+0

Należy zauważyć, że większość aplikacji blokuje send_events(), ponieważ jest to rażąca całość bezpieczeństwa. Wracając we wczesnych X11 dniach użyliśmy go do wpisania innych użytkowników xterms. :-) –

+0

Próbuję nagrać moje naciśnięcia klawiszy, a następnie odtwarzać je ponownie, tj. Nagrywać makra, aby zaoszczędzić czas. – ar31

+0

Lepiej radzić sobie na poziomie aplikacji niż na niskim poziomie przez X11. –

Odpowiedz

7

Powinieneś być w stanie użyć rozszerzenia XTEST do sfałszowania danych wejściowych do aktywnego okna, używając funkcji 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); 

Zobacz przykładowy przykład: xte program in xcb/demos.

+0

Dziękujemy za udostępnienie tego! Większość aplikacji blokuje 'send_event', a' test_fake_input' brzmi, jakby działało. skompilować z g ++ czy jest coś do dodania? Aktualnie kompiluję z 'g ++ main.cc -o trigger -std = C++ 11 -lxcb'. Dzięki! – Noitidart

Powiązane problemy