Befehle an eine "aktive" Konsole senden



  • Hallo,

    ich habe vor Befehle/Eingaben an eine Konsole zu senden die in meiner Applikation
    gestartet wird. Eigentlich hätte ich gedacht das ich das realtiv einfach über
    SendMessage() hinbekomme. Scheine mich da getäuscht zu haben 😉

    Bisher habe ich es so versucht,

    HWND handle =  ShellExecute(0, "open" , "c:\\windows\\system32\\cmd.exe", NULL, NULL, SW_SHOWNORMAL);
     // Sleep(500);
     SendMessage(handle, WM_SYSKEYDOWN, VK_RETURN, 0);
     SendMessage(handle, WM_SYSKEYUP, VK_RETURN, 0);
    

    (Das Sleep war nur ein Test ob ich vielleicht einfach nur zu schnell war)

    In meiner Konsole allerdings kommt nichts an.

    Vielleicht noch zur Aufklärung. Ich starte mit dem Programm unter anderem einen VPN-Client der dann eine aus einer mySQL Table das Cert. sowie den Key holt diesen dynamisch an die Systempfade anpasst und dann mit diesen Parametern die openVPN.exe startet. Nur benötigt der Client danach noch ein PWD. Dieses allerdings DARF nicht in der config stehen. Deshalb muss nach dem starten der EXE noch etwas an die Konsole gesendet werden.



  • du bekommst bei ShellExecute afaik ein HINSTANCE - handle zurück und kein HWND...



  • Das erklärt einiges.
    Wie sieht es mit CreateProcess aus? Oder gibt es Möglichkeiten über das gelieferte HINSTANCE an ein HWND zu kommen?

    Ich sehe die WinAPI und ich brauchen noch etwas bis wir Freunde werden 🙂


  • Mod

    Warum schreibst Du keinen Batch File und startest diesen einfach per ShellExecute? Warum musst Du Tastatureingaben senden.

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



  • Hmm,

    wenn ich dynamisch das Batchfile erstelle, dieses dann über ShellExecute starte,
    dann startet Windows doch eine Konsole IN der eine Stapelverarbeitung verarbeitet wird.

    dir >> c:\ausgabe.txt
    ping google.de
    tracert google.de
    

    wäre ja auch alles kein Problem. Wenn ich Batchdateien noch richtig in Erinnerung habe,
    wird der Befehl ausgeführt (z.B. ping.exe ausgeführt) und NACH beenden des Aufrufs wird
    der nächste "Befehl" im Stapel ausgeführt. (oder liege ich da falsch?)

    Wenn ich jetzt meine openVPN.exe starte. Dann wird das Programm nicht beendet. Das Programm
    läuft bis zum "terminate". Somit würde also der nächste Befehl im Stapel doch gar nicht
    mehr ausgeführt, nicht wahr?!? Oder hätte ich über ein Batch tatsächlich die Möglichkeit mit
    einem Batch einem aufgerufenem Programm zu interagieren? Wäre mir neu aber habe mich Jahre
    nicht damit nicht auseinander gesetzt.

    Zudem hätte ich die Möglichkeit wenn ich die Applikation über den C-Code ausführe auch somit
    wieder sauber zu beenden. (Programm tot >> VPN tot) Muss aber nicht zwingend sein da hätte
    ich andere Möglichkeiten. Nur wäre das die Ideale Lösung.

    Das Umleiten des Ein/Ausgabe Streams wären 120% da ich so aus eine sehr gute Fehleranalyse
    anhand des Ausgabe direkt über meine Apllikation durchführen könnte. Nur ist das
    für meinen aktuellen Wissensstand was solch enge Arbeit mit der WinAPI angeht noch
    viel zu niedrig ist, habe ich das erstmal ausgeschloßen.

    Das senden an das Fenster über FindWindow() ist viel zu anfällig für User Fehler.
    (Falscher Klick zur flaschen zeit funzt es schon nicht mehr)
    Zudem egal ob ich Asbach 'Edit', eine leere Konsole oder WingCommander 3 starte.
    Steht unter Vista im Fenstertitel immer der Systempfad der cmd.exe (c:\wind....)
    Ist eine 2 Konsole auf haut er das Passwort da rein und die Folgen sprechen ja für
    sich wenn das pwd dann dort landet. 🙂

    D.h. heißt für mich die verbleibende Lösung sollte ein MSG send über
    SendMessage/ProcessMessage/InputMessage sein. Zudem halt der oben gennante Vorteil wenn ich
    ein Handle auf die Anwendung habe.

    Jetzt weiß ich nur nicht wie ich an das Handle kommen soll wenn der return von ShellExecute()
    nicht wie erhofft das hWnd liefert. 😞

    Alternative Lösungsvorschläge sind gerne gesehen.

    (openVPN libs bzw direkten QuellCode einbinden fällt leider auch raus)
    Dies ist das letzte Problem welches mich unglaublich aufhält und damit
    meine Beta_1 verhindert. 😞


Anmelden zum Antworten