Tastatur Multiplexer [gelöst]



  • Nun mit einem Hook (Global mit dll) kannst Du sämtliche Nachrichten filtern auch nach Tastaturnachrichten. Je nach dem erhält man direkt die Nachricht oder nur eine Kopie, da ist die Doku etwas undurchsichtig, für Deinen Fall sollten aber die Kopien ausreichen.
    Das Du an Putty keine Nachrichten schicken kannst verstehe ich nicht so ganz, ist das evtl. in Java? Was aber immer geht ist SendInput() nur müsstest Du dann erst den InputFocus auf Putty setzen u. wieder zurück, ich weiss aber nicht ob das praktikabel ist.

    Edit: Eine Frage hab ich noch: Das Fenster was die Nachrichten versenden soll, kann irgendein Fenster sein oder ist immer das selbe?



  • Ein Tastaturhook ist overkill.

    Und das hier ist totaler Quatsch:

    // das Putty Fenster
    const unsigned int h = 854928;
    

    Das Handle des Putty-Fensters ist doch nciht unveränderlich



  • Ich denke schon, daß er vorher das Handle per Hand bestimmt, oder?!



  • Hallo,

    natürlich hab ich dafür noch eine Funktion. Die Variable steht da nur zum testen. Wie funktioniert es denn nun (auch ohne den Hook)?



  • Den Hook brauchst Du nur um irgendwelche Tatstatureingaben zu erhalten (von beliebigen Fenstern).
    Die Fernsteuerung des Putty-Fensters hätte ich auch so versucht wie Du es gemacht hast (SendMessage). Da das anscheinend nicht geht kannst Du noch versuchen mit SendInput zu arbeiten, das überschreibt IMHO den Tastaturpuffer. Da kann keiner wiederstehen. Dazu must Du aber den Eingabefocus auf Putty setzen und wieder zurück, was sich störend auswirken könnte.



  • Hallo,

    tja, das Fenster in den Vordergrund holen scheidet aus, weil ich ja mehrere Fenster ansprechen will, dann dürfte das extrem flimmern. Aber auch an Putty selbst kann es nicht liegen, da es ja z.B. auch mit Notepad nicht klappt. Irgendwie seltsam.



  • AlfredHitzkopf schrieb:

    ... da es ja z.B. auch mit Notepad nicht klappt.

    Bist Du sicher, dass Du auch das richtige Fensterhandle hast ? Notepad z.B. besteht aus mehreren Fenstern. Nur eines von denen kann was mit Tastatureingaben anfangen.



  • Hallo,

    das Fensterhandle ist gültig. Ich habs auch nochmal mit so einen Spy++-ähnlichen Tool überprüft. Trotzdem kein Erfolg. Ich hab auch schon gegooglet, aber bei solchen Themen findet man auch keinen Beispielcode. 😞



  • Du brauchst das Fensterhandle des Textfeldes, das ist dir schon klar?



  • Hallo,

    ja, es ist definitiv das richtige Fenster. Ich habs mit Notepad, Putty und dem Eingabefeld von Excel probiert, was definitiv ein eigenes Handle hat.



  • Oh, eben erst entdeckt.
    wParam und lParam in SendMessage () sind vertauscht :

    BOOL CMyShellDlg::PreTranslateMessage(MSG* pMsg) 
    { 
    ...
    // ::SendMessage( (HWND)h, pMsg->message, pMsg->lParam, pMsg->wParam ); // so nicht
     ::SendMessage( (HWND)h, pMsg->message, pMsg->wParam, pMsg->lParam ); // aber so
    ...
    }
    

    🙂



  • Hallo,

    Tatsache. Das war die Lösung. Besten Dank!!!



  • Neiiiin *vor die Stirn hau* Gott sei dank haben wir hier einen Merker 😉


Anmelden zum Antworten