0

我正在尝试将 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 到 Python 的绑定部分,我只需将键码 (key_value) 传递给函数。我对密钥释放事件(GDK_KEY_RELEASE)做了类似的事情。在 Python 部分中,我调用这两个函数(按下然后释放),它适用于普通键,如 a、s、d 等。但是,它不适用于 BackSpace、Enter、Delete 等。

4

1 回答 1

1

我通过使用通过 gtk.gdk.keymap_get_default() 获得的 KeyMap 对象解决了这个问题。KeyMap 具有 get_entries_for_keyval(keycode) 方法,您只需将 keycode 的值传递给该方法。它返回一个三元组:hardware_code、group 和 level。因此,当我通过 hardware_code 和 group 时,一切都开始工作了,除了箭头键。

于 2011-08-16T00:56:55.927 回答