Wie sendet man einen Tastendruck an ein bestimmtes Fenster?



  • Hallo,

    wie der Titel schon sagt habe ich mich ein wenig eigelesen und
    Kebd_event() und SendInput() gefunden. Beide haben jedoch kein Fenster oder einen ProzessId als Übergabe. SendInput kann zudem nur an das Fenster mit Focus senden. Ich möchte zudem das auch Spiele die DirectInput verwenden auf den gesendeten Tastendruck reagieren. Es soll der Druck und das Loslassen seperat möglich sein.

    Wie lösst ihr das?

    Grüße,
    TheNoName


  • Mod

    Es gibt keine andere "korrekte" Möglichkeit Tasaturinput zu senden, wenn eine Anwendung nicht aktiv und den Fokus hat.



  • Also willst du Tasteneingaben an eine Anwendung senden wenn diese auch minimiert ist?

    Naja, manche Leute probieren da mit PostMessage und SendMessage rum aber ka wie gut das klappt ich hab es noch nicht getestet aber ich denke es wird nicht Fehlerfrei funktionieren.

    Martin hatte dazu mal ein paar Artikel geschrieben:

    http://blog.m-ri.de/index.php/2007/12/24/die-unsitte-windows-interne-nachrichten-zu-versenden/

    http://blog.m-ri.de/index.php/2007/12/27/die-unsitte-tastatureingaben-mit-wm_keydown-nachrichten-zu-simulieren/

    ossi
    
    Wer mit SetFocus u.ä. arbeitet, der kann keine Tasten an ein minimiertes Fenster sendet. Niemals.
    
    Frohes Neujahr!
    
    on Fr 28 Dez 2007 um 19:05 # 
    Martin Richter
    
    Wenn ich mich nicht ganz und gar irre kann ist ein minimiertes Fenster unsichtbar und kann per Definition weder den Focus haben und auch keine Tastatureingaben erhalten und schon gar kein Childwindow innerhalb der Applikation, die minimiert ist. Das ist so…
     Man mag mit WM_KEY… Nachrichten Effekte erzielen, jedoch wird man niemals gleiches Verhalten erreichen wie bei einer echten Tastatureingabe bzw. einer die durch SendInput erzeugt wurde.
    

    "Man mag mit WM_KEY… Nachrichten Effekte erzielen, jedoch wird man niemals gleiches Verhalten erreichen wie bei einer echten Tastatureingabe"

    Wäre ähnliches Verhalten ausreichend? mhhm thenoname das müsstest du wohl selbst einfach mal testen.

    Wobei eigentlich müsste in der Anwendung ja gefragt werden welche Tasten gerade gedrückt wurde.

    Z.b.
    Pseudocode:

    while(1)
    
    if ( key == w )
    {
       // Laufe vorwärts
    }
    
    if ( key == d )
    {
     // Laufe nach links
    }
    
    .....
    

    Vielleicht kannst du da was mit WriteProcessMemory machen ...


Anmelden zum Antworten