Text ins aktuelle Fenster einfügen - Zeichenkodierungsprobleme



  • Hi,
    Ich habe aus dem Netz einen Sourcecode gefunden, mit dem man Text ins aktuelle Fenster einfügen kann. Das funktioniert wunderbar, nur leider habe da Zeichenkodierungsprobleme. Es werden einfach Zeichen verschluckt. Ich habe das versucht zu umgehen, in dem ich XK_-Konstanten nehme aber auch damit gehts nicht. Aus XK_equal macht er z.B. eine 0.
    Weiß da jemand weiter, was ich an dem Source ändern muss, damit alle Zeichen richtig in das fokusierte Fenster eingefügt wird?
    Danke,
    Tsunami

    void DialogImpl::Key(){
        Display *display; 
        Window focus_return; 
        int revert_to_return; 
    
        if ((display = XOpenDisplay(NULL)) == NULL) { 
            printf("Unable to open display\n"); 
            return 1; 
        } 
    
    	XGetInputFocus(display, &focus_return,&revert_to_return); 
    	QString Taste("1234567890   ,.-;:_äöü+-*/?ß!\"§$%&/()");
    
     	for (int i=0; i<Taste.length(); ++i) { 
    	    XEvent ev; 
    	    KeySym key; 
    	    QString Zeichen = Taste.mid(i, 1);
    	    key = XStringToKeysym(Zeichen.toAscii()); 
    
    	    if (Zeichen == "+") key = XK_plus;
    	    if (Zeichen == "-") key = XK_minus;
    	    if (Zeichen == "=") key = XK_equal;
    	    if (Zeichen == ",") key = XK_comma;
                if (Zeichen == "?") key = XK_question;
    
    	    ev.xkey.type = KeyPress; 
    	    ev.xkey.window = focus_return; 
    	    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.same_screen = true; 
    	    ev.xkey.keycode = XKeysymToKeycode(display, key);
    
    	    // Muss der Buchstabe gross geschrieben werden?
    	    if (Zeichen != Zeichen.toLower()) ev.xkey.state = ShiftMask; // Shift wurde gedrückt, also gross schreiben
    	    else ev.xkey.state = 0;
    
    	    XSendEvent(display, focus_return, true, KeyPressMask, &ev); 
    	    ev.type = KeyRelease; 
    	    XSendEvent(display, focus_return, true, KeyReleaseMask, &ev); 
    	} 
      XCloseDisplay(display); 
    }
    

    Bei diesem Beispiel wird Folgendes in das aktuelle Fenster eingefügt:

    1234567890,--+ß

    Der Rest wird verschluckt.


Log in to reply