Получить ввод utf-8 с отображением X11 для всех оконLinux

Ответить Пред. темаСлед. тема
Anonymous
 Получить ввод utf-8 с отображением X11 для всех окон

Сообщение Anonymous »

Я разрабатываю свой собственный кейлоггер и решил сделать это через события с сервера x11.
Я подписываюсь на события и получаю некоторый код нажатия клавиши в любом окне. Но мне нужно получить сам символ — букву или цифру, в зависимости от раскладки клавиатуры. И я не знаю, как это сделать в моем случае. Мне сказали использовать метод (Xutf8LookupString)
но для этого метода требуется структура XIC.
Как я могу использовать эту структуру в своем коде, если я не могу привязаться к определенному окну, мне нужно получать ввод из любого окна. Подскажите пожалуйста, как это сделать?
Вот мой код, который работает и возвращает мне код ключа, подскажите пожалуйста, как можно добавить использование функции Xutf8LookupString?

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 

void key_pressed_cb(XPointer arg, XRecordInterceptData *d);

int scan(int verbose) {
XRecordRange* rr;
XRecordClientSpec rcs;
XRecordContext rc;
Display *dpy = XOpenDisplay(NULL);
rr = XRecordAllocRange();
rr->device_events.first = KeyPress;
rr->device_events.last = ButtonReleaseMask;
rcs = XRecordAllClients;
rc = XRecordCreateContext (dpy, 0, &rcs, 1, &rr, 1);
XFree (rr);
XRecordEnableContext(dpy, rc, key_pressed_cb, NULL);
}

void key_pressed_cb(XPointer arg, XRecordInterceptData *d) {
if (d->category != XRecordFromServer)
return;

int key = ((unsigned char*) d->data)[1];
int type = ((unsigned char*) d->data)[0] & 0x7F;
int repeat = d->data[2] & 1;

if(!repeat) {
switch (type) {
case KeyPress:
printf("key press %d\n", key);
break;
case KeyRelease:
printf("key release %d\n", key);
break;
case ButtonPress:
printf("button press %d\n", key);
break;
case ButtonRelease:
printf("button release %d\n", key);
break;
default:
break;
}
}
XRecordFreeData (d);
}

int main() {

scan(True);

std::this_thread::sleep_for(std::chrono::seconds(3600));
return 0;
}

пожалуйста, помогите мне с кодом.

Подробнее здесь: https://stackoverflow.com/questions/786 ... all-window
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»