Exe Starten und Position und Größe angeben



  • Hallo,

    ich arbeite gerade an diversen Testprogrammen, komme aber bei den einfachsten Sachen nicht weiter. Diesmal habe ich das problem, dass ich mehrere Exe Dateien ausführen möchte und diesen eine feste Position und Größe geben möchte.
    Leider weiß ich aber nicht wie das geht. Wie ich die Exe ausführe hab ich schon in den FAQs gelesen, aber wie kann ich jetzt die Position und Größe angeben?

    Bye



  • Hallo

    indem du mit der Win-API Funktion SetWindowPos() über cen Handle, der aus dem Ausruf mit ShellExecuteEx() o.ä. entsteht, neue Werte zuweist.

    bis bald
    akari



  • Also, ich hab jetzt folgendes:

    AnsiString Pfad_der_EXE = "C:\\x29.exe";
    ShellExecute(Handle,0,Pfad_der_EXE.c_str(), 0, Pfad_der_EXE.c_str(),SW_NORMAL);
    

    Aber wie mach ich jetzt das mit SetWindowPos? (Sorry, bin noch Anfänger)



  • Hmm... was wohl die MSDN dazu sagt...? Google: site:msdn.microsoft.com SetWindowPos



  • Sorry, aber das zeug aus der msdn-libary check ich echt überhaupt nicht. Da wäre ein beispiel ganz gut



  • Hallo,

    Wie Akari schon sagte, brauchst ShellExecuteEx statt ShellExecute. Da du den Handle des erzeugten Fensters für SetWindowPos benötigst.
    Etwa so:

    SHELLEXECUTEINFO sei;
    ZeroMemory((PVOID)&sei, sizeof(sei));
    // Infostruktur füllen
    sei.cbSize = sizeof(sei);
    sei.fMask  = SEE_MASK_NOCLOSEPROCESS;
    sei.nShow  = SW_SHOW;
    sei.lpVerb = TEXT("open");
    sei.lpFile = TEXT("C:\\x29.exe"); // Name der Applikation
    //sei.lpParameters = TEXT("para"); falls Parameter erforderlich sind
    ShellExecuteEx(&sei);
    // Test ob Aufruf erfolgreich, sei.hProcess ist dann das Handle der aufgerufenen Applikation
    if(sei.hProcess)
    {
    // Setzen von Position und Größe, Parameter müssen vorher belegt werden
        SetWindowPos(sei.hProcess, HWND_TOP, top, left, width, height, SWP_NOSIZE);
    }
    

    Die Parameter mußt du halt entsprechend anpassen. Im von HEZ angegebenen Link ist auch ein Beispiel dabei.
    Bei weiteren Nachfragen solltest du aber im WinAPI-Forum nachfragen.

    Ciao



  • Ach so, ShellExecute() gibt ja gar kein Handle zurück. Brauchst also doch ShellExecuteEx(). Na da wirst du um die MSDN wohl nicht rum kommen.

    Ist wohl inzwischen ein WinAPI-Problem, vielleicht findest du in dem Unterforum was. (Suchen, nicht posten, wird ein Mod schon verschieben, wenns da rübergehört.)

    //Oha, hab gar nicht bemerkt, dass sich da jemand reingedrängt hat...



  • Ok, danke für die Hilfe, leider wird aber nicht die Größe und die Position des Fensters geändert. Hab diese Frage jetzt schon im WinAPI-Forum gestellt.

    Bye



  • Liest Du die Postings überhaupt?!?

    HEZ schrieb:

    (Suchen, nicht posten, wird ein Mod schon verschieben, wenns da rübergehört.)



  • Kann es sein, daß der Parameter "SWP_NOSIZE" an der Stelle fehl am Platz ist?

    MSDN schrieb:

    SWP_NOSIZE
    Retains the current size (ignores the cx and cy parameters).

    Ansonsten müßte es irgendeine Möglichkeit geben, zu dem hProcess das Fenster herauszufinden *grübel*



  • Das SWP_NOSIZE hab ich da nur so hingeschrieben ohne auf die Wirkung zu schauen. Immerhin steht die Bedeutung der Parameter im angegebenen Link. Ich selber hab mit SetWindowPos noch nicht gearbeitet.



  • Naja, ich verwende SWP_SHOWWINDOW, damit funktionierts aber auch nicht



  • Du brauchst ein Fensterhandle, um etwas mit dem Fenster machen zu können, kein Prozesshandle. Also mußt du das erstmal rausfinden (versuch' mal FindWindow() dafür)



  • MartinN schrieb:

    Hab diese Frage jetzt schon im WinAPI-Forum gestellt.

    Und da geht's jetzt weiter.

    In Zukunft aber bitte den Thread von einem Moderator in das gewünschte Forum verschieben lassen.


Anmelden zum Antworten