`
icarusli
  • 浏览: 531050 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

注册按键[i8320]

 
阅读更多

也是API DOC中有。 下面是简单使用的代码。

更详细的可以看文档或者gtk源代码。gdkkeysyms.h gdkkeysyms.c

 

头文件#include <gdk/gdkkeysyms.h>

#include <gdk/gdkevents.h>
下面是占用按键。这个grab的模式是后来后得,谁最后grab了,就是谁的。就像是入栈出栈一样。谁在栈尾,谁享受按键。
一旦你grab了一个按键 ,那么,这个按键动作就会一直发送到你的程序,直到有新的程序起来了,并grab它,或者你ungrab.   int keyID;

    gdk_key_grab(NULL, GDK_End_k,0,TRUE);// 这三个就是主面板的三个键。

    gdk_key_grab(NULL, GDK_Send,0,TRUE);

    gdk_key_grab(NULL, GDK_Home_k,0,TRUE);

    keyID = gtk_key_snooper_install(key_snoop, window);//函数。
key_snoop响应按键。gint key_snoop(GtkWidget* widget, GdkEventKey* event, gpointer data)

{  

 

//我这里三个键按下去都是将程序窗口隐藏起来。

    if(widget == NULL)

    {

        switch(event->keyval)

        {

            case GDK_End_k:

                k_hide_window(data);

                return TRUE;

            case GDK_Send:

                k_hide_window(data);

                return TRUE;

            case GDK_Home_k:

                k_hide_window(data);

                return TRUE;

            default:

                return FALSE;

        }  

    }

    return FALSE;

}
实现,,,,记得隐藏起来后要把按键注销了。。要不然你程序隐藏起来了按键消息还往你那发。void k_hide_window(gpointer data)

{  

    fprintf(stderr,"=======  main window hide =========\n");

    gtk_window_iconify(GTK_WINDOW(data));//将窗口隐藏起来

    gdk_key_ungrab(NULL, GDK_End_k,0);

    gdk_key_ungrab(NULL, GDK_Send,0);

    gdk_key_ungrab(NULL, GDK_Home_k,0);

}
比如说我是通过订阅了一个消息将窗口激活的。
这个回调函数是这样的,将窗口显示出来之后又要将那些按键重新grab到。gboolean __OnNotifyDeiconify(EvtSysEventSourceId_t source_id, const char* noti_id, const GArray* properties, void* priv_data)

{

    EvtSysEventProperty_t* e;

    e = &g_array_index(properties, EvtSysEventProperty_t, 0);

    if(strcmp(e->value.s, "com.heimutuzhu.heyc.deiconify") == 0)

    {

        fprintf(stderr,"=== com.heimutuzhu.heyc.deiconify received.====\n");

        gtk_window_deiconify(GTK_WINDOW(priv_data));//将窗口重新显示出来。

        gdk_key_grab(NULL, GDK_End_k,0,TRUE);

        gdk_key_grab(NULL, GDK_Send,0,TRUE);//再次grab这些按键

        gdk_key_grab(NULL, GDK_Home_k,0,TRUE);

        fprintf(stderr,"=======  main window show =========\n");

    }

    return TRUE;

}

分享到:
评论

相关推荐

    华仕飞HTK100触摸按键驱动程序

    5. **设备枚举**:驱动程序会识别并注册触摸按键设备,使其在操作系统中可见,以便应用程序可以调用。 6. **用户接口**:`__HTK_Drv.h` 和 `__HTK_EVAL.h` 文件可能包含了驱动程序的头文件,定义了对外的API接口,...

    基于QT开发的一款按键精灵

    对于每个子文件(如«ⁿ⌐│w½÷z、«ⁿ⌐│w½÷i等),这些可能是按键精灵的配置文件或者记录的按键序列。文件名中的特殊字符可能是编码或加密的结果,用于存储和识别不同的按键组合或动作。这些文件可能使用某种...

    S3C2440 按键驱动程序

    打开设备操作`open`函数中注册了按键的中断处理程序,并设置了中断类型为下降沿触发: ```c static int s3c24xx_buttons_open(struct inode *inode, struct file *file) { int i; int err; for (i = 0; i (button...

    驱动级按键模拟winio源码

    这种技术通常涉及到系统底层的I/O操作,用于控制硬件设备,如键盘,以模拟用户的按键行为。WinIO是Windows内核模式下的一种I/O控制工具,它允许用户直接与硬件交互,绕过常规的用户模式API,提供更高的效率和更低...

    三种方式下编写的按键驱动

    这种驱动通常用于处理简单I/O操作的设备,如键盘。字符设备驱动通过打开、读取、写入和关闭等标准文件操作接口与用户空间交互。在创建字符设备驱动时,我们需要定义设备节点,注册设备类,分配设备号,并实现设备...

    开发按键驱动

    在该文件中,开发者会定义按键设备的结构体,注册设备节点,处理中断或轮询事件,以及解析按键状态等操作。 1. **设备结构体**:在Linux内核中,每个设备都有一个与之关联的设备结构体,用于存储设备的相关信息。...

    s3c2440 按键驱动程序

    S3C2440处理器具有高性能和低功耗的特点,内置了多种外设接口,如USB、I2C、SPI等,适用于各种嵌入式应用场合。对于按键这样的基本输入设备的支持,通常通过GPIO(General Purpose Input/Output)引脚来实现。 ### ...

    inc_按键_

    在硬件层面,按键连接到微控制器的输入/输出(I/O)口,而在软件层面上,我们需要相应的头文件、宏定义和初始化函数来与这些物理按键进行交互。 首先,让我们详细了解一下“按键头文件”(inc_按键_)的作用。...

    mini2440按键驱动实验--4个按键分别控制4个LED灯

    然后,用户空间的应用程序可以通过系统调用或者ioctl接口与驱动通信,设置LED的状态或者注册按键中断处理程序。例如,可以编写一个简单的控制程序,允许用户通过命令行来控制LED灯的开关,或者通过按键触发特定的...

    KEY---int.zip_按键_按键 lcd_按键中断显示

    2. 设置按键中断:将按键连接的GPIO配置为中断模式,设定中断触发条件(上升沿或下降沿),并注册中断服务程序。 3. 中断服务程序:当按键被按下或释放时,ISR被调用。这里可能需要消抖处理,避免按键抖动引起的误...

    TQ210按键驱动(中断方式)

    - **注册中断服务例程**:编写中断服务程序,当按键中断发生时,该程序会被执行。通常包括读取按键状态、处理按键事件及清除中断标志等操作。 - **启用中断**:开启GPIO端口的中断功能,允许中断发生。 4. **串口...

    测试键盘的各个按键的值

    这个过程通常涉及到低级别的输入输出(I/O)处理,有时也会与操作系统和驱动程序的交互有关。以下是对这个主题的详细阐述: 1. 键盘结构与工作原理:键盘通常由一组物理按键组成,每个按键下面连接一个开关,当按下...

    S3C2410中断按键驱动

    - `&lt;asm/io.h&gt;`:I/O操作。 #### 宏定义 - `MODULE_AUTHOR`、`MODULE_LICENSE` 和 `MODULE_DESCRIPTION` 分别指定了模块的作者、许可协议和描述信息。 - `DEBUG` 定义了一个调试打印宏,可以根据条件选择是否启用...

    一个相当详细的S3C2440按键驱动详解

    在Linux内核中,可以通过注册中断处理函数来实现这一功能。例如: ```c void buttons_interrupt(unsigned int irq, void *dev_id, struct pt_regs *regs) { int i; for (i = 0; i (button_irqs); i++) { if (irq...

    s3c2440按键中断,亲测可用!

    4. **中断处理**:当按键被按下时,中断控制器会向CPU发送中断请求,CPU响应后跳转到注册的中断服务例程执行。 5. **中断关闭与恢复**:在某些情况下,例如在低功耗模式下,可能需要关闭中断;在处理完成后,需重新...

    基于ARM9开发板的按键字符设备驱动实现.rar

    对于按键,这通常是在`init`函数中完成的,通过调用`register_chrdev`函数分配设备号并注册字符设备驱动。 2. **设备文件创建**:驱动程序会创建一个或多个设备文件,用户空间的应用可以通过`open`, `read`, `write...

    src_i2c_keypad.rar_Keypad_Linux 键盘_i2c驱动 linux_linux i2c_键盘 linu

    在`i2c-keypad.c`中,开发者会定义I2C设备的地址、注册驱动、设置数据传输协议,以及处理来自按键矩阵的输入事件。 `i2c-keypad.h`是相关的头文件,它包含了驱动程序需要的函数声明、结构体定义和常量。例如,可能...

    MDK中的mini2440外部中断按键实验

    2. `button.__i`和`button.crf`:这部分可能包含了处理按键输入的代码。在S3C2440中,通过配置GPIO端口为输入模式,并设置中断触发条件(如边沿触发或电平触发),我们可以检测按键的按下和释放事件。 3. `main.__i...

Global site tag (gtag.js) - Google Analytics