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!


Anmelden zum Antworten