Wie wird bei ShellExecute nShowCmd an die Zielanwendung übergeben?`



  • Hallo,

    ich habe eine Frage zu ShellExecute und dem nShowCmd Parameter.

    Wenn ich ein anderen Programm über ShellExecute starte und einen Parameter wie SW_SHOW oder SW_HIDE angebe - wie wird dieser an die Zielanwendung übermittelt?

    Prinzipiell kann sich das doch nur auf eine Anwendung mit Fenstern beziehen? (ist in meinem Fall auch so)
    Wie entscheidet Windows dann, auf welches Fenster sich das Flag bezieht? Das erste erzeugte? Und wie wird das Flag dann an dieses Fenster übermittelt? Der normale Windows-Entrypoint nimmt solche Informationen ja schließlich nicht an. Edit: mein Fehler - tut er doch

    Gibt's hierzu vielleicht ausführliche technische Doku? Die MSDN und die Suchfunktion hat mir nicht weitergeholfen. Vielleicht suche ich auch nach den falschen Wörtern?

    Nur zur Info, es geht mir wirklich nur darum, dass ein anderes Win32-Executable mit dem Verb "open" geöffnet wird. Die ganzen anderen Fälle, die vielleicht eine gesonderte Behandlung haben, interessieren zumindest mich gerade nicht. 🙂

    Edit:
    Ich denke ich hab's selbst rausgefunden. In der Doku zur Struktur STARTUPINFO in CreateProcess steht u.A. das hier:

    wShowWindow
    If dwFlags specifies STARTF_USESHOWWINDOW, this member can be any of the SW_ constants defined in Winuser.h. Otherwise, this member is ignored.
    For GUI processes, wShowWindow specifies the default value the first time ShowWindow is called. The nCmdShow parameter of ShowWindow is ignored. In subsequent calls to ShowWindow, the wShowWindow member is used if the nCmdShow parameter of ShowWindow is set to SW_SHOWDEFAULT.

    Ich vermute mal, dass ShellExecute es genauso macht bzw. intern CreateProcess verwendet.



  • Der gestartete Process muss dies mit "GetStartupInfo" abfragen. Einige machen es, viele machen es nicht.


  • Mod

    Aber nCmdShow Parameter wird doch "kostenfrei" an WinMain übergeben...



  • Außerdem muss man das gar nicht abfragen, das erledigt ShowWindow automatisch



  • Ja, das hatte ich inzwischen auch alles rausgefunden. Trotzdem Danke für die Antworten. 🙂


Log in to reply