захват (прослушивание) глобально для мыши и клавиатуры без использования X11

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

#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <unistd.h>
#include <X11/Xlib.h>
#include <time.h>

using namespace std;char keymap[32];
char prevKeymap[32];

bool hasTyped(Display* display)
{
XQueryKeymap(display, keymap);
for(int i=0; i<32; i++)
{
if (prevKeymap[i]!=keymap[i])
{
XQueryKeymap(display, prevKeymap);
return true;
}
}
return false;
}

int main(int , char *[])
{
//setBrightness(defaultBrightness);
Display *display;
Window root, fromroot, tmpwin;
int x, y,prev_x,prev_y, tmp;
uint tmp2;

if ((display = XOpenDisplay(NULL)) == NULL)
{
fprintf(stderr, "xpointerswap: fatal: cannot open local X display\n");
exit(100);
}

root = DefaultRootWindow(display);

XQueryPointer(display, root, &fromroot, &tmpwin, &prev_x, &prev_y, &tmp, &tmp, &tmp2);
XQueryKeymap(display, prevKeymap);

while(1)
{
XQueryPointer(display, root, &fromroot, &tmpwin, &x, &y, &tmp, &tmp, &tmp2);
if(x!=prev_x || y!=prev_y || hasTyped(display))
{
prev_x = x;
prev_y = y;
cout<< "(" << x << "," <<  y << ")\n";
}
}
return EXIT_SUCCESS;
}

(ссылка)

Он слушает сообщения клавиатуры, но когда клавиша нажата, он вводит местоположение указателя мыши (я хочу, чтобы он вместо этого печатал код клавиши). Как я могу изменить его так, чтобы вместо него печатался код клавиши (при нажатии клавиши)?

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]