KeyCode/KeySym в строковый символ

195
25 апреля 2018, 06:35

Пишу кейлоггер под линукс (C++), ловлю нажатия через XInput2, но конвертация кейкодов в символы происходит только в английские буквы, независимо от выбранной раскладки.

// Register events:
Window root = DefaultRootWindow(display);
XIEventMask event_mask;
event_mask.deviceid = XIAllMasterDevices;
event_mask.mask_len = XIMaskLen(XI_LASTEVENT);
event_mask.mask = static_cast<unsigned char*>(calloc(event_mask.mask_len, sizeof(char)));
XISetMask(event_mask.mask, XI_RawKeyPress);
XISetMask(event_mask.mask, XI_KeyPress);
XISelectEvents(display, root, &event_mask, 1);
XSync(display, false);
free(event_mask.mask);
while (true) {
    XEvent event;
    XGenericEventCookie *cookie = &event.xcookie;
    XNextEvent(display, &event);
    if (
        XGetEventData(display, cookie) &&
        cookie->type == GenericEvent &&
        cookie->extension == xi_opcode
    ) {
        switch (cookie->evtype) {
            case XI_RawKeyPress: {
                XIDeviceEvent* ev = static_cast<XIDeviceEvent*>(cookie->data);
                KeySym keysym = XkbKeycodeToKeysym(display, ev->detail, 0, 0);
                if (keysym == NoSymbol) continue;
                char* str = XKeysymToString(keysym);
                if (str == NULL) continue;
                printf("%s\n", str); // Английские буквы, независимо от раскладки
                break;
            }
        }
    }
}

Пробовал передавать event.xkey в XLookupString внутри кейса - получаю пустоту. Как правильно получить символ с учётом раскладки?

READ ALSO
Передача по сети структуры с указателем

Передача по сети структуры с указателем

Если я создаю структуру, в которой есть поле указательУказателю я присваиваю адрес на некоторую другую структуру (назову ее С) и затем благополучно...

299
Разница функий между float, void, int

Разница функий между float, void, int

За все мое обучение на программиста, так и не затрагивалась тема, причина использования функций void, int или float

158
Библиотека FLTK

Библиотека FLTK

Собрал библиотеку FLTKПытаюсь её протестировать

180
QJoysticks краш приложения при использовании Z-Axis

QJoysticks краш приложения при использовании Z-Axis

Подключил QJoysticks в свое приложение и при движении Z-Axis, мое приложение вылетает с ошибкой, хотя я даже не где его не использую

168