c - 检测 Control 键何时被释放

标签 c linux gtk keyboard-events

我正在尝试使用以下代码检测何时释放了 Control 键:

#include <stdlib.h>
#include <unistd.h>
#include <gtk/gtk.h>

int main (int argc, char* argv[])
{
    const unsigned int pause_microseconds = 100 * 1000;

    gtk_init(&argc, &argv);

    GdkModifierType mask;
    while (1) {
        if(gdk_window_get_pointer(NULL, NULL, NULL, &mask) == NULL){
            puts("gdk_window_get_pointer failed");
            return EXIT_FAILURE;
        }

        unsigned control_has_been_released = (mask & GDK_CONTROL_MASK) != GDK_CONTROL_MASK;
        if (control_has_been_released) {
            puts("OK");
            return EXIT_SUCCESS;
        }

        if(usleep(pause_microseconds) != 0){
            puts("usleep failed");
            return EXIT_FAILURE;
        }
    }
}

但是我得到了这个输出:

 gdk_window_get_pointer failed

编译代码:

 gcc -Wall -g ctrl.c -o ctrl `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0`

我试过以 root 身份运行代码,但结果是一样的。

最佳答案

gdk_window_get_pointer()不能用 NULL 第一个参数调用;即,您需要指定一个窗口。

最重要的是,为了能够看到更改,您可能需要运行事件循环,请参阅 Getting keyboard modifiers state using Gnome libs (GDK) fetches initial state only .

关于c - 检测 Control 键何时被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50439227/

相关文章:

c - 在结构中将指针数组初始化为 NULL

linux - NVIDIA Jetson TX2 中无法识别的命令行选项 '-m64'

linux - 如何将文件从 dockerfile 复制到主机?

c - 来自按钮数组的 GTK 信号 C 语言

python - Gtk警告: could not open display

python - Gtk 3,python,appindicator,禁用标签附近的图标

c - 如何将结构体的数组变量传递给另一个函数?

c - 不同类型的双(或高阶)指针有什么区别吗?

c - 在不忙等待的情况下实现互斥锁

linux - bash 脚本从文件中获取所花费的时间