У меня есть этот код, который может глобально прослушивать сообщения клавиатуры:
#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;
}
(ссылка)
Он слушает сообщения клавиатуры, но когда клавиша нажата, он вводит местоположение указателя мыши (я хочу, чтобы он вместо этого печатал код клавиши). Как я могу изменить его так, чтобы вместо него печатался код клавиши (при нажатии клавиши)?
Задача ещё не решена.