我正在尝试将GTK键盘事件发送(注入)到某个窗口,特定于其中包含webkit webview的窗口。我遇到的问题是使用Backspace,Up,Down等特殊键。由于某些原因,它们没有正确注入,这意味着不会触发相应的功能。对于其他键,它完美地工作。我试图将键盘聚焦在窗口上并将窗口放在窗口z-index堆栈的顶部,但它没有帮助。
GdkEvent* const event = gdk_event_new(GDK_KEY_PRESS);
event->key.window = self->window->window;
event->key.send_event = TRUE;
event->key.time = GDK_CURRENT_TIME;
event->key.state = 0; event->key.keyval = key_value;
event->key.hardware_keycode = 0;
event->key.length = 0; event->key.string = 0;
event->key.group = 0;
//key_value is the code for the key.
这是C to Python绑定部分,我只是将键码(key_value)传递给函数。我为密钥发布事件(GDK_KEY_RELEASE)执行类似的操作。在Python部分我调用这两个函数(按,然后释放),它适用于普通键,如a,s,d等。但是,它不适用于BackSpace,Enter,Delete等。
答案 0 :(得分:1)
我通过使用gtk.gdk.keymap_get_default()获得的KeyMap对象解决了这个问题。 KeyMap的方法是get_entries_for_keyval(keycode),你只需要传递keycode的值。它返回一个三元组:hardware_code,组和级别。因此,当我通过hardware_code和组时,一切都开始工作,箭头键除外。