为何单独Gdk_BackSpace这个按键不能模拟
在模拟一些按键的时候,偏偏Gdk_BackSpace这个不行,查了下它的编码是0xff08,而我模拟的其他按键都在256一下。
不知道如何去模拟大于这之类的,求教。
[xx_KEY_T] = GDK_t,
[xx_KEY_U] = GDK_u,
[xx_KEY_V] = GDK_v,
[xx_KEY_W] = GDK_w,
[xx_KEY_X] = GDK_x,
[xx_KEY_Y] = GDK_y,
[xx_KEY_Z] = GDK_z, //A-Z
[xx_KEY_SPACE] = GDK_space,
[xx_KEY_BACKSPACE] = GDK_BackSpace, //无效
使用gtk_main_do_event(event);来模拟,其他键都可以,偏偏这个不行
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果哪个按键模拟不了,就看看在标准键盘上按下这个键盘输出的是什么
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=%dn",
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();
}