LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1088|回复: 7

gtk如何截获键盘输入

[复制链接]
发表于 2005-4-27 12:47:42 | 显示全部楼层 |阅读模式
就象在mplayer按f全屏一样
哪位大侠可以提供一点思路
或者哪二有这方面的资料?
发表于 2005-4-27 12:54:57 | 显示全部楼层
以前在dos下截获键盘输入好像是修改的中断向量
回复 支持 反对

使用道具 举报

发表于 2005-4-27 20:41:28 | 显示全部楼层
可以使用event_box阿,也看看下面的例子
[PHP]#include <gtk/gtk.h>

void press()
{
        g_print ("press\n");
}

int main(int argc,char *argv[])
{
GtkWidget *window;
        gtk_init(&argc,&argv);
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_widget_set_events (window,
                        GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK|GDK_BUTTON_PRESS_MASK );
        g_signal_connect(G_OBJECT(window),"delete_event",
                        G_CALLBACK(gtk_main_quit),NULL);
        g_signal_connect(G_OBJECT(window),"key_press_event",
                        G_CALLBACK(press),NULL);
        gtk_widget_show_all(window);
        gtk_main();
        return 0;
}[/PHP]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-28 09:17:40 | 显示全部楼层
谢谢楼上的兄弟
但我怎样才能得到用户按了什么键?
我查了半天的api也没找出个所以然来:(
回复 支持 反对

使用道具 举报

发表于 2005-4-28 16:31:34 | 显示全部楼层
回调函数应该写成这样
void press(GtkWidget *widget,GdkEventKey *event)
{
        g_print ("press: %x\n",event->keyval);
}
event->keyval就是按键的值,键盘定义看gdk/gdkkeysyms.h
f键就是GDK_F 或者GDK_f
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-30 23:05:31 | 显示全部楼层
o, i get it
thx
回复 支持 反对

使用道具 举报

发表于 2005-5-6 12:05:56 | 显示全部楼层
我还有问题,这样的话好象只有焦点在这个窗口时按键才有效,如何才能实现系统级的热键呢?
回复 支持 反对

使用道具 举报

发表于 2005-5-6 17:42:16 | 显示全部楼层
也不一定是要系统级的。
还有二级可用呢。
一是,窗口管理器级,如 xfce4 , gnome , kde
二是,x-system 级。都是一种选择。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表