KeyEvents in Window übertragen
-
mahlzeit,
um mit meiner Tastatur Keycode in einen Editor zu übertragen, habe ich nun folgendes gemacht:
dpy = XOpenDisplay(NULL); // um Displayvariable zu initialisieren XSelectInput(dpy, win, KeyPressMask) // KeyEvents für's fokussierte Fenster
so und dann verließen sie ihn etwas.
auf diesen link bin ich gestoßen:
http://www.eggdrop.ch/texts/xlib/da steht dann z.b. das:
case KeyPress: if (event.xkey.keycode == XKeysymToKeycode(dpy, Taste)) { /* die Taste wurde gedrückt */ } break;
wenn ich das so ungefähr nur ohne switch-case bei mir anwende, meckert der compiler von qt rum.
"request for member 'xkey' in 'this->QWidget::event', which is of non-aggregate type '{unknown type}'"da hänge ich gerade fest. habe dann auch versucht mit printf() was auszugeben aber nix macht er.
hat jemand nen tipp wie ich weiter vorgehen kann. ich kann doch gar nicht mehr so weit entfernt sein von meinem ziel.mfg bastian
-
ich habe gerade festgestellt, dass ich irgendwie den zeiger des fokussierten programms nicht richtig implementiere.
ich habe jetzt zu stehen:
dpy=XOpenDisplay(NULL); XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_A), True, 0);
aber weil der zeiger dpy ja null ist und nicht den wert des fokussierten windows hat, macht er nix.
mit welcher funktion kann ich das aktuelle fokussierte fenster bestimmen.
mit XGetFocusInput() geht es irgendwie auch nicht.
ich gebe ja mit dieser funktion nur ein index (int) zurück brauche aber für den richtigen wert ne variable vom typ display. gibt es irgendeine funktion mit dem ich den index-wert in ein displaywert umwandeln kann?bastian
-
Display hat nichts mit Window zu tun! Mit der Funktion simulierst du nur einen Tastendruck auf einem Display, dann erhält das Window of dem Display, was gerade den Focus hat die Taste.
-
es hat geklappt:
fehlte nur noch das flushen des speichers:
dpy=XOpenDisplay(NULL);
GetInputFocus(dpy, ¤t_focused_window, &revert_to);
XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_A), True, 0);
XFlush(dpy);