используя GetKeyState (VK_CAPITAL) & 1 в Linux - PullRequest
3 голосов
/ 26 января 2012
#include <windows.h>

int main() {
if ( !GetKeyState(VK_CAPITAL) & 1 ) {
printf("caps off");
}
else
printf("caps on");
return 0;
}

, но только для окон

как это сделать в linux с gcc?

что такое & 1 в GetKeyState(VK_CAPITAL) & 1?

1 Ответ

4 голосов
/ 26 января 2012

Для наиболее распространенного случая настольного компьютера на базе X11:

#include <stdio.h>
#include <X11/XKBlib.h>

int main() {
    Display * d = XOpenDisplay((char*)0);

    if (d) {
        unsigned n;

        XkbGetIndicatorState(d, XkbUseCoreKbd, &n);

        printf((n & 1)?"caps on\n":"caps off\n");
    }
}

Убедитесь, что у вас есть заголовки разработки X11 и выполните компиляцию с:

$ gcc -lX11 test.c -o test

Запустите его из окна консоли на рабочем столе:

$ ./test
caps off
$ ./test
caps on
...