"Fernsteuern" einer Dialoganwendung (z.B. Mausklick aus einem anderen Programm simulieren)
-
Hallo,
ich möchte eine Dialoganwendung fernsteuern, also z.B. aus einem Überwachungsprogramm automatisch einen Button anklicken.
Hier das Grundgerüst meines bisherigen Codes:
// Hauptfenster der Anwendung suchen CWnd * wndMain = CWnd::FindWindow( NULL, "Anwendung" ); if( wndMain != NULL ) { char buffer[1000]; // Kindfenster (also enthaltenen Elemente, Buttons, usw.) suchen CWnd * wndChild = wndMain->GetWindow( GW_CHILD ); while( wndChild ) { // Fenstertext ermitteln ... wndChild->GetWindowText( buffer, 1000 ); // ... und damit den gesuchten Button if( !strncmp(buffer, "MyButton") ) { // TODO: Nachricht an den Button (oder an wndMain?) schicken ... :confused: // PostMessage/SendMessage? Wohin muss welche Nachricht? ... // Schleife beenden wndChild = NULL; } else { wndChild = wndChild->GetNextWindow(); { } }
Wie Ihr seht, habe ich noch das Problem, welche Nachricht ich mit welcher Methode an welches Fenster zu schicken habe.
Vielleicht bin ich aber auch mit dem ganzen Lösungsansatz auf dem falschen Weg?Ich hoffe nun auf Hinweise und Hilfestellungen zu diesem Problem
.
Vielen Dank!
-
Ne, du bist auf dem richtigen Wege...
Zu erst musst du mit Spy++ das ButtonHWND herausfinden.
SendMessage(ButtonHWND, BM_CLICK, 0, 0);
Gruß
:: NoName ::
-
Danke NoName,
Spy++ sagt mir leider nichts.
Was ist das bzw. wie funktioniert das?Ich habe aber auch noch etwas rumgebastelt und bin inzwischen auf folgenden Weg gekommen (im Code bei // TODO: ...):
// Ermitteln der ButtonID int myButtonID = wndChild->GetDlgCtrlID(); // Absetzen der Nachricht (asynchron) an Hauptfenster // oder synchron (auf Ausführung warten) mit SendMessage wndMain->PostMessage(WM_COMMAND, myButtonID, BN_CLICKED); // Nachricht asynchron absetzen