如何使用 将按键或按键释放事件从另一个程序发送到窗口(当前活动窗口)XCB
?
我找到了一些使用 的教程XLib
,但是我想使用XCB
.
我想我将不得不调用xcb_send_event
,但是我不知道将它作为参数传递什么。
您应该能够使用 XTEST 扩展来伪造活动窗口的输入,使用 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);
有关工作示例,请参见xcb/demos 中的 xte 程序。
可能的替代方案:xcb_send_event()
请参阅: X11R7.7 API 文档
那里的例子:
/*
* Tell the given window that it was configured to a size of 800x600 pixels.
*/
void my_example(xcb_connection_t* conn, xcb_window_t window) {
//
// Every X11 event is 32 bytes long. Therefore, XCB will copy 32 bytes.
// In order to properly initialize these bytes, we allocate 32 bytes even
// though we only need less for an xcb_configure_notify_event_t
//
xcb_configure_notify_event_t* event = calloc(32, 1);
event->event = window;
event->window = window;
event->response_type = XCB_CONFIGURE_NOTIFY;
event->x = 0;
event->y = 0;
event->width = 800;
event->height = 600;
event->border_width = 0;
event->above_sibling = XCB_NONE;
event->override_redirect = false;
xcb_send_event(conn, false, window, XCB_EVENT_MASK_STRUCTURE_NOTIFY, (char*) event);
xcb_flush(conn);
free(event);
}