tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
2433
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Kaiser206 Kaiser206 ist offline Mitglied Gold
    Registriert seit
    Jun 2005
    Beiträge
    175
    Hallo,
    ich habe folgende Funktion geschrieben:

    void sendKey(HWND window, char key)
    {
    SendMessage(window, WM_KEYDOWN, key, 0);
    SendMessage(window, WM_KEYUP, key, 1);
    }

    Sie soll eine beliebige Taste an ein Fenster senden zb Notepad.
    allerdings funktioniert sie nicht. Kann mir bitte jemand meinen Fehler zeigen?

    Danke im Vorraus!

    (g++ / windows)
     

  2. #2
    Kaiser206 Kaiser206 ist offline Mitglied Gold
    Registriert seit
    Jun 2005
    Beiträge
    175
    HTML-Code:
    void sendKey(HWND window, char key)
    {
       PostMessage(window, WM_KEYDOWN, key, 0);
       PostMessage(window, WM_KEYUP, key, 1);
    }
    Damit kann ich jetzt text an calc und cmd schicken. Wenn ich jetzt aber etwas an Notepad / Wordpad sende passiert nichts. Die Eingaben kommen an aber nicht im Textfeld(F1 funktioniert zb). Muss man bei notepad das textfeld einzeln ansprechen?
     

  3. #3
    Avatar von _Van
    _Van _Van ist offline Mitglied Bronze
    Registriert seit
    Mar 2008
    Beiträge
    43
    Würde ich auch gerne wissen.

    Mein Theard hier: http://www.tutorials.de/forum/c-c/30...stmessage.html

    Leider bekamm ich damals keine lösende Antwort ...
     
    you have to look in yourself, to save yourself from your other self,
    only then, will your true self, reveal itself . . .

  4. #4
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    680
    cmd und calc haben nur ein Eingabefeld, sprich das MainWindow selbst processed jeden keydown.
    Natürlich benutzen Programme wie Wordpad mehrere Child´s innerhalb ihrer Fenster, wobei keydown im MainWindow vermutlich nur auf bestimmten keys, wie z.B. Esc processed wird.
    Darum kannst du zwar eine keydown message senden, aber processed wird sie nicht, solange nicht das richtige child Fenster den Focus hat.
    Stell dir vor du sendest VK_RETURN ans Programm, während gerade das Menü auf Datei-beenden den Focus hat.

    @ _Van
    Der Versuch über die ProcessIDd ran zu kommen scheitert auch, weil du
    1) Nicht weisst, ob der gesuchte Empfänger überhaupt ForegroundWindow ist
    2) Selbst wenn du das richtige Fenster findest, du immer noch nicht weisst, welcher Thread in dessen Programm gerade Current ist. Wenn das z.B. ein timer ist, landet dein input auch im Nirwana.
     

  5. #5
    Kaiser206 Kaiser206 ist offline Mitglied Gold
    Registriert seit
    Jun 2005
    Beiträge
    175
    gibt es denn sonst eine möglichkeit tasten an ein fenster zu senden? Mit SetForegroundWindow() und SendInput() klappt es ja in den notepad zu schreiben. Das Fenster muss aber halt den Focus haben.
     

  6. #6
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    680
    Selbst SetForegroundWindow() funktioniert nur dann, wenn der aufrufende Thread selbst ForegroundWindow ist, wobei nach SetForegroundWindow() der aufrufende Thread nicht mehr selbst ForegroundWindow ist, sprich sobald der User irgendwohin klickt, kommen weitere Messages nicht mehr an, bzw. werden nicht mehr processed.

    Es gibt keine Möglichkeit aus einer Anwendung heraus Messages an ein Child einer anderen Anwendung zu schicken, einfach weil das HWND des fremden Child im Rest vom System nicht gültig ist, selbst wenn du den Namen vom Child kennst geht es nicht.
    Nur dann, wenn das MainWindow einer Anwendung selbst die Message verarbeitet oder weiterleitet, so wie z.B. SendInput() bei Notepad das macht, kommt eine Message an, in allen anderen Fällen nicht.
    Du kannst vielleicht noch mit simulierten Mausbewegungen und Klick das richtige Fenster aktivieren, aber dem dann eine KEYDOWN Message zu schicken scheitert wieder daran, dass das HWND des Child im Rest vom System nicht gültig ist.
     

Ähnliche Themen

  1. Tastendruck direkt an Fenster Senden
    Von Net_Ghost03 im Forum VisualStudio & MFC
    Antworten: 0
    Letzter Beitrag: 12.03.09, 13:56
  2. Ein fremdes Fenster erkennen und überlappen
    Von Act of Fate im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 19.12.08, 10:26
  3. Antworten: 3
    Letzter Beitrag: 11.07.07, 22:18
  4. VB6: Tastatureingabe an ein spezielles Fenster senden?
    Von Tensi im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 13.03.05, 18:40
  5. Senden an AKtives Fenster!
    Von vbanfaenger im Forum Visual Basic 6.0
    Antworten: 4
    Letzter Beitrag: 21.07.04, 14:15