Tastendruck unter X11 simulieren.
-
Guten Abend!
Weiß jemand, wie man unter X11 einen Tastendruck simulieren kann?! Es sollte wenn möglich auch eine Kobimnation mehrerer Tasen möglich sein...
Mfg, Lord Kefir
-
Müsste irgendwie in die Richtung XSendEvent gehen.
-
Falls mal jemand ein ähnliches Problem hat, hier mal der Lösungsansatz:
#include <stdio.h> #include <stdlib.h> #include <X11/Xlib.h> #include <X11/Xutil.h> #include <string.h> int main (int argc, char *argv[]) { Display *dpy; Window window; char *s; int i; if (argc<3) { printf("usage: ./sendkey windowid key1 key2 key3 etc.\n\n"); return(1); } if ((dpy=XOpenDisplay(NULL))==NULL) { fprintf(stderr, "error: cannot open display\n\n"); return(1); } window=(Window)strtol(argv[1], &s, 0); if (*s) { fprintf(stderr, "error: bad windowID\n\n", s); XCloseDisplay(dpy); return(1); } for (i=2; i<argc; ++i) { XEvent ev; KeySym key; ev.xkey.type=KeyPress; ev.xkey.window=window; ev.xkey.root=ev.xkey.subwindow=None; ev.xkey.time=0; ev.xkey.x=ev.xkey.y=ev.xkey.x_root=ev.xkey.y_root=0; ev.xkey.state=0; key=XStringToKeysym(argv[i]); ev.xkey.keycode=XKeysymToKeycode(dpy, key); ev.xkey.same_screen=True; XSendEvent(dpy, window, True, KeyPressMask, &ev); ev.type=KeyRelease; XSendEvent(dpy, window, True, KeyReleaseMask, &ev); } XCloseDisplay(dpy); return(0); }[code]
Den ganzen Rotz mit gcc file.c -o progname -L /usr/X11/lib -lX11 kompilieren und das Programm entsprechend aufrufen: ./progname "$WINDOWID" key1 key2 key3 etc.
Danke noch mal für den Tipp!