2012-01-09 5 views
7

Làm cách nào để gửi một sự kiện phát hành nhấn phím hoặc phím tới cửa sổ (cửa sổ hiện đang hoạt động) từ một chương trình khác bằng cách sử dụng XCB?Làm thế nào để gửi sự kiện quan trọng đến ứng dụng bằng cách sử dụng XCB?

Tôi đã tìm thấy một số hướng dẫn sử dụng XLib, tuy nhiên tôi muốn sử dụng XCB.

Tôi đoán tôi sẽ phải gọi xcb_send_event, tuy nhiên tôi không biết phải chuyển nó làm thông số.

+0

Bạn nên lưu ý rằng hầu hết các ứng dụng chặn send_events() vì nó là toàn bộ bảo mật trắng trợn. Quay trở lại những ngày đầu X11, chúng tôi đã sử dụng nó để nhập vào xterms người dùng khác. :-) –

+0

Tôi đang cố gắng ghi lại các lần nhấn phím của mình rồi phát lại chúng, tức là ghi lại các macro để tiết kiệm thời gian. – ar31

+0

Bạn nên làm việc ở cấp độ ứng dụng thấp hơn mức X11. –

Trả lời

7

Bạn sẽ có thể sử dụng phần mở rộng XTEST để nhập giả vào cửa sổ đang hoạt động, sử dụng hàm 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); 

Xem ví dụ xte program in xcb/demos để biết ví dụ làm việc.

+0

Cảm ơn bạn đã chia sẻ điều này! Hầu hết các ứng dụng đang chặn các âm thanh 'send_event' và' test_fake_input' giống như nó thực hiện thủ thuật. để biên dịch với g ++ có gì để đưa vào không? Tôi hiện đang biên dịch với 'g ++ main.cc -o trigger -std = C++ 11 -lxcb'. Cảm ơn! – Noitidart