ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
2433
2433
EMPFEHLEN
-
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)
-
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?HTML-Code:
void sendKey(HWND window, char key) { PostMessage(window, WM_KEYDOWN, key, 0); PostMessage(window, WM_KEYUP, key, 1); }
-
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 . . .
-
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.
-
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.
-
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
-
Tastendruck direkt an Fenster Senden
Von Net_Ghost03 im Forum VisualStudio & MFCAntworten: 0Letzter Beitrag: 12.03.09, 13:56 -
Ein fremdes Fenster erkennen und überlappen
Von Act of Fate im Forum C/C++Antworten: 0Letzter Beitrag: 19.12.08, 10:26 -
fremdes Fenster auslesen (Fenstereigenschaften)
Von roxX0r im Forum C/C++Antworten: 3Letzter Beitrag: 11.07.07, 22:18 -
VB6: Tastatureingabe an ein spezielles Fenster senden?
Von Tensi im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 13.03.05, 18:40 -
Senden an AKtives Fenster!
Von vbanfaenger im Forum Visual Basic 6.0Antworten: 4Letzter Beitrag: 21.07.04, 14:15





Zitieren
Login






