Witam. Potrzebuje aby nieaktywna aplikacja (z ikonka w trayu) reagowala na skroty klawiszowe. Program pisany jest w Qt4. Na windowsie moge skorzystac z GetAsyncKeyState(), ale czy istnieje moze jakis odpowiednik na linuksie? moze w Xlib? Bede wdzieczny za kazda podpowiedz.
Pozdrawiam
Chodak
C++ - globalne skroty klawiszowe
Dzieki Theq, mysle ze oto chodzilo jednak jestem o krok od rozwiazania problemu. Wyprobowalem XGrabKey i dziala bardzo ladnie jednak tylko pod oknem ktore wczesniej stworze:
Domyslam sie, ze wlasnie zamiast tworzyc to okienko powinienem jakos wyciagnac globalny kontekst tak zeby moj program nie musial byc aktywny, z tym ze nie mam pojecia jak... Jakies pomysly?
Kod: Zaznacz cały
XEvent ev;
Display * dis = XOpenDisplay(0);
if(!dis) return;
//Window win = ???????
Window win = XCreateSimpleWindow(dis, RootWindow(dis, 0), 1, 1, 500, 500, 0, BlackPixel (dis, 0), BlackPixel(dis, 0));
XMapWindow(dis, win);
XFlush(dis);
KeyCode key = XKeysymToKeycode(dis, XStringToKeysym("F6"));
XGrabKey(dis, key , AnyModifier, win, True, GrabModeAsync, GrabModeAsync);
while(1)
{
XNextEvent(dis, &ev);
if(ev.type == KeyPress && ev.xkey.keycode == key)
qDebug() << "S U K C E S";
}
Zgadza sie:
Kod: Zaznacz cały
win = DefaultRootWindow(dis);
Z DefaultRootWindow probowalem juz wczesniej, niestety:
EDIT:
Problem rozwiazany - BadAccess jest powodowany przez AnyModifier, zastapienie go przez np ShiftMask lub '0' rozwiazuje sprawe.
Pozdrawiam
Chodak
kompilacja przebiega pomyslnie, powyzszy error ukazuje sie po uruchomieniu.X Error: BadAccess (attempt to access private resource denied) 10
Major opcode: 33 (X_GrabKey)
Resource id: 0x188
EDIT:
Problem rozwiazany - BadAccess jest powodowany przez AnyModifier, zastapienie go przez np ShiftMask lub '0' rozwiazuje sprawe.
Pozdrawiam
Chodak
http://www.libqxt.org
Rozszerzenie do qt, mozesz sobie podejrzec jak zaimplementowali tu (qxtwindowsystem_x11.cpp) globalne skroty w Xach. Z tego co tu widze XGrabKey zwraca GrabSuccess jak jest sukces
Rozszerzenie do qt, mozesz sobie podejrzec jak zaimplementowali tu (qxtwindowsystem_x11.cpp) globalne skroty w Xach. Z tego co tu widze XGrabKey zwraca GrabSuccess jak jest sukces
