Декодирование значений ключей из / dev / input / eventx в C [closed]

Я создал кейлоггер на C, который отображает необработанные значения ключей с устройства ввода. Мне интересно, как я могу расшифровать эти значения в символы ascii? Вот мой код на данный момент:

#include <stdio.h>
#include <fcntl.h>
#include <linux/input.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>

void INThandler(){
        exit(0);
}

int main()
{
        char devname[] = "/dev/input/event3";
        int device = open(devname, O_RDONLY);
        struct input_event ev;

        signal(SIGINT, INThandler);

        while(1)
        {
                read(device,&ev, sizeof(ev));
                if(ev.type == 1 && ev.value == 1){
                        printf("Key: %i State: %i\n",ev.code,ev.value);
                }
        }
}

Пример вывода:

Key: 32 State: 1
Key: 42 State: 1
Key: 29 State: 1

Я знаю, что эти значения являются порядковыми номерами для размещения клавиш на клавиатуре, а не кодами ascii, поэтому существует ли какой-то системный файл, содержащий инструкция по конвертации? Я не хочу выполнять преобразование вручную, потому что оно будет отличаться для всех клавиатурных устройств.

Спасибо, любая помощь приветствуется

0
задан 19 September 2016 в 03:37

1 ответ

Необходимо будет получить контурные карты и использовать его для перевода тех кодов, которые Вы читаете от дескриптора файла до символов ASCII, которые Вы хотите зарегистрировать.

На Ubuntu, можно получить контурную карту с командой dumpkeys (выполненный как корень) или командой xmodmap -pke. По некоторым причинам я еще не вполне понимаю, вывод xmodmap, кажется, имеет смещение. Можно исправить это смещение легко, но я не знаю о том, что является причиной позади него. Возможно, это имеет отношение xmodmap первоначально записанный для Sun Microsystems и X11 с помощью различных кодов клавиши (поскольку это, кажется, предлагается здесь ), но я просто предполагаю вслух..

1
ответ дан 28 September 2019 в 13:40

Другие вопросы по тегам:

Похожие вопросы: