fokussiertes fenster, keyevent simulieren, daten übertragen



  • mahlzeit,

    ich habe mit Qt ne SW-Tastatur programmiert. Damit ich meine Buchstaben nun auch in das fokussierte Fenster (z.b.: nen editor) reinbekomme, wollte ich die xlib-bibliothek nehmen.

    könnte mir jemand paar schritte als anleitung geben, wie ich das machen könnte und was ich alles beachten muss.

    dachte so daran, dass ich erst ermittle welches fenster gerade den tastaturfokus hat. dann nen keyevent simuliere und dann meinen scancode der taste an das fokussierte fenster schicke.

    mfg bastian



  • http://www.the-labs.com/X11/XLib-Manual/

    wenn ich zu Hause bin, schau ich mir das Problem nochmal genauer an



  • ich habe das nun mal probiert mit XTestFakeKeyEvent().

    wenn ich eine taste drücke (signal-slot-prinzip) dann sage ich:
    XTestFakeKeyEvent(display, Scancode, True, 0);

    beim kompilieren meint er aber display wird vorher nicht definiert und wird zum 1. mal benutzt, obwohl ich vorher sage:

    Display *display;

    würde das schon ausreichen, um z.b. nem editorfenster den keyevent zu schicken?

    bastian



  • habe das ganze nun mal umgeändert. er kompiliert auch prima nur bis kurz vor schluss da bringt er nen fehler im object-file.

    habe nun extern Display *dpy deklariert.

    meckert nun wegen der deklaration auch nicht mehr rum.
    es kommt nun dieser fehler zum schluss:

    file.o(.text+0x9):undefined reference to 'dpy'
    file.o(.text+01e):undefined reference to 'XTestFakeKeyEvent'

    es hängt irgendwie mit ner library zusammen. in welcher finde ich den Datentypen Display?

    bastian



  • habe nun das extern bei Display weggenommen und nun kommt der fehler nicht mehr.
    beim anderen habe ich nur noch ne library beim kompilieren hinzugefügt.

    beim drücken der taste nun kommt speicherzugriffsfehler.

    kann ich mit fakekeyevent überhaupt nen tastendruck simulieren?
    da ist ja die variable keycode drin und deswegen müsste das eigentlich schon funktionieren.
    es geht dann nur noch um die variable dpy. gibt diese an welches fenster gerade aktiv ist? wenn ja, wie kann ich mit welcher funktion bestimmen, welches fenster gerade aktiv ist?

    bastian



  • du benutzt es nur falsch. Display musst du natürlich vorher initialisieren, sonst dereferenziert er einen wilden Pointer (und das wollen wir ja nicht :))

    Lies dir am besten mal ein XLib Tutorial durch

    (btw. weiss ich nicht, ob du Qt und XLib so ohne weiteres in einem Programm kombinieren kannst)



  • moin,

    also ich habe jetzt meine displayvariable +dpy mit 0 vorinitialisiert. ich suche dann mal, wie ich dieser variable das aktuelle fokussierte fenster zuweisen kann.

    derzeit habe ich auch keine probleme mit qt und xlib. habe auch viel darüber gelesen, dass wenn man unter linux grafisch programmieren will dazu xlib und z. b. gtk oder qt benutzen kann.

    mfg bastian



  • also ich habe jetzt mehrere sachen probiert. den displayzeige habe ich jetzt richtig initialisiert. bekomme nun keinen speicherzugriffsfehler mehr. aber mit der funktion xtestfakekeyevent klappt es leider auch nicht, dass ich meinen tastendruck auf nen editorfenster übertragen kann. muss ich evtl. noch events hinzufügen und dann mit xdrawimagestring.

    gibt es noch ne andere möglichkeit den tastendruck einfacher zu übertragen?
    ich denke ich stehe kurz davor aber hänge trotzdem immer noch fest.

    bastian


Anmelden zum Antworten