Offenes Programm in den Vordergrund rufen!



  • Hi ich wollte ein bereits gestartetes Programm in den Vordergrund rufen! Wie ist das nun möglich?

    Ich starte das Programm mit:

    System("test.exe");
    

    mit einen anderen Programm will ich es wieder in den Vordergrund bringen mit:

    Setforegroundwindow(hWnd);
    

    Ist das die beste Möglichkeit das Programm zu starten und wie definiere ich dann hWnd.. habt ihr ein Beispiel, weil unter der suche habe ich zwar einiges gefunden aber leider nicht leicht verständliches in C++ dazu!



  • Hallo,

    Das ist deswegen kein leicht verständliches C++, weil es größtenteils C und WinAPI ist. Deswegen solltest du diese Frage auch dort stellen.
    Das Fensterhandle könntest du z.Bsp. mit FindWindow bekommen. Du kannst z.Bsp. statt system ja auch ShellExecute oder besser ShellExecuteEx nehmen. Da bekommst du noch zusätzliche Infos mit.
    Aber wie gesagt. das ist alles WinAPI und dafür gibt es ein eigenes Forum.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Autsch,

    system("test.exe");

    ist aber wirklich gaanz böse. Schau dir in der MSDN mal CreateProcess(...), oder wenigstens ShellExecute(...) an...



  • starte das programm mit createprocess() (s.o.), da erhälst du eine Process-ID.
    suche dann nach allen top-level-fenstern mithilfe von EnumWindows() und schaue mithilfe von GetWindowThreadProcesId(), welches Fenster die obige Process-ID hat.
    Hast du es gefunden, nimm das Window-Handle welches dir EnumWindows() lieferte und übergib es SetForegroundWindow().



  • Warum eigentlich CreateProcess und nicht ShellExecuteEx. Ich fand die etwas einfacher zu bedienen.


  • Mod

    Sehe ich genauso, ich würde grundsätzlich eher ShellExecute(Ex) als CreateProcess verwenden.



  • CreateProcess startet direkt den Prozess. Mit ShellExecute wird die Datei _nur_ geöffnet. Man kann zB auch JPGs mit ShellExecute öffnen, wo dann der Standard-Viewer geöffnet wird.

    Das macht bei Exen manchmal Probleme, wenn man da ShellExecute benutzt. Bei CreateProcess kann man dann zum Beispiel auch noch Kommandozeilenparameter übergeben, was bei Shellexecute nicht möglich ist.
    Ausserdem kann man die Prozesse besser verwalten (neue Processgroups öffnen etc).



  • Natürlich kannst du auch bei ShellExecute(Ex) Parameter übergeben!
    Und wie gesagt es ist einfacher und erfüllt auf jeden Fall seinen Zweck!

    schirrmie



  • oh sorry, stimmt, sehe ich grade.

    aber du bist mit createprocess viel näher am system, wie ich schon geschrieben habe. du bekommst processid, etc zurück und kannst beim starten auch den process in einer neuen processgroup starten, etc. das geht alles mit shellexecute nicht...



  • Ja brauch man aber meist auch nicht. Und wenn man es nicht brauch wieso es sich dann "umständlich" mit CreateProcess machen. Es ist ja gut wenn jemand sagt das es das gibt (hier soll ja nix unterschlagen werden ;)) aber ich finde es falsch jemanden dies als DIE und nur DIE Lösung anzubieten. Es kommt immer auf den Anwendungsfall an! Und wie es sich anhört reicht ihm ShellExecute.

    schirrmie



  • Das es DIE Lösung ist, wollte ich nicht rüberbringen 😉
    Es gibt aber zum Beispiel recht viele Probleme unter Vista mit ShellExecute.
    Stichwort: Administratorrechte, eingeschränkter Nutzer, usw.

    Aber ich weiß ja nicht, ob er was Vistakompatibles machen woll 🙂


  • Mod

    Was gibt es für Probleme mit ShellExecute unter Vista bitte?



  • Machine schrieb:

    Stichwort: Administratorrechte, eingeschränkter Nutzer, usw.

    Da oben stehts. Hab leider keine Zeit was genauer zu erläutern.


Anmelden zum Antworten