"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
    

Anmelden zum Antworten