Обнаружение, когда клавиша управления была выпущена - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь определить, когда был выпущен управляющий ключ, с помощью этого кода:

#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, но результат тот же.

1 Ответ

0 голосов
/ 21 мая 2018

gdk_window_get_pointer() нельзя вызвать с первым аргументом NULL;т.е. вам нужно указать окно.

Кроме того, чтобы увидеть изменения, вам, вероятно, нужно запустить цикл обработки событий, см. Получение состояния модификаторов клавиатуры с помощью библиотеки Gnome (GDK) выбирает только начальное состояние .

...