- 论坛徽章:
- 0
|
如果哪个按键模拟不了,就看看在标准键盘上按下这个键盘输出的是什么
gint snooper_func(GtkWidget *widget,GdkEventKey *event,gpointer data)
{
switch(event->keyval){
case GDK_BackSpace:
dprintk("KEY:'%s',keyval=0x%x,state=%d,leng=%d,string='%s',code=%d,is_modify=%d\n",
gdk_keyval_name(event->keyval),event->keyval,event->state,
event->length,event->string,event->hardware_keycode,event->is_modifier);
break;
}
return FALSE;
}
gtk_key_snooper_install(snooper_func,NULL);
//FIXME:模拟退格键一定要指定hardware_keycode为22
static void simulate_key(GtkWidget *window,int keyval,int press)
{
GdkEvent *event;
GdkEventType type;
//GtkWidget *widget;
//这里只是获取这个主窗口的焦点
//如果要在当前程序中模拟按键,就不要指定焦点了,这时候要用gtk_main_do_event,
//widget = gtk_window_get_focus(GTK_WINDOW(wbus->window));
if(press) //按键按下
type = GDK_KEY_PRESS;
else //释放
type = GDK_KEY_RELEASE;
event = gdk_event_new(type);
event->key.send_event = TRUE;
event->key.keyval = keyval;
event->key.window = window->window; //一定要设置为主窗口
//event->key.window = gtk_widget_get_toplevel(window)->window;//FIXME:备用
g_object_ref(event->key.window);
if(keyval == GDK_BackSpace){
//event->key.state = GDK_MOD2_MASK; //16;
event->key.hardware_keycode = 22; //FIXME:一定要用这个,要不然模拟不了
}
gdk_threads_enter();
//FIXME: 记得用这个来发送事件
gtk_main_do_event(event);
gdk_event_free(event);
gdk_display_flush(gdk_display_get_default());
gdk_threads_leave();
} |
|