SW_MINIMIZE & ShellExecute

The_Rave

Mitglied
Ich möchte ein Programm minimiert starten lassen und rufe folgende Funktion auf:
ShellExecute(NULL,"open","f:\\Firefox\\Firefox.exe",NULL,NULL,SW_MINIMIZE);

Nur leider wird das Fenster nur normal gestartet. Weiß jemand warum einige Programme sich nicht minimiert starten lassen mit SW_MINIMIZE? Gibts dafür noch einen anderen Weg?
 
Du könntest es mal so probieren:
Code:
 WinExec("f:\\Firefox\\Firefox.exe",SW_SHOWMINIMIZED);

Greetz...
Sinac
 
Nein, das klappt auch nicht. system ("start...") hab ich auch schon probiert. Sieht so aus als ob es Fenster gibt die dieses SW_MINIMIZE nicht unterstützen.
 
Warum sich manche Programm nicht minimiert starten lassen, kann ich leider nicht sagen. Windows selbst schafft es allerdings auch nicht: Die Einstellung "minimiert" bei einer Firefox-Verknüpfung bleibt ebenfalls wirkungslos.
Als Alternative könntest du das Fenster nach dem Start minimieren. Sieht zugegebenerweise nicht ganz so toll aus.
C++:
ShellExecute(NULL,"open","f:\\Firefox\\Firefox.exe",NULL,NULL,SW_MINIMIZE);

Sleep(1000); // kleines Wartepäuschen, bis das Firefox-Fenster "richtig da ist",
             // sonst reagiert es nicht auf 'ShowWindow' (geht bestimmt noch eleganter zu lösen)

HWND hwnd = ::FindWindow(_T("MozillaUIWindowClass"), NULL);

if( hwnd )
{
    ::ShowWindow(hwnd, SW_MINIMIZE);
}
Gruß
MCoder
 
Danke, das mit der Pause ist wohl im Moment die einzige Möglichkeit. Aber die Hintergründe warum das nicht geht würden mich trotzdem interessieren. Falls also jemanden noch was einfallen sollte...
 
Diesen Window-Code SW_SHOW, SW_MINIMIZED usw. bekommt ein Programm in seiner WinMain als Parameter mit. Den kann es dann benutzen oder auch nicht. Faule Programmierer ignorieren das und schon klappt es nicht wie gewünscht.
 
Ja, genau. Um es richtig zu machen, sollte man nach dem CreateWindow des Hauptfenster ein ShowWindow mit nCmdShow drin aufrufen.
 
Ja aber ShowWindow ansich hat ja schon immer funktioniert wenn das Proggy gestartet war. Nur eben nicht wenn man das über ShellExecute gestaretet und den SW_MINIMIZE Parameter übergeben hat.
 
Na klar funktioniert ShowWindow auch direkt. Der Gag ist, dass nCmdShow genau dem Wert entspricht, der über ShellExecute angegeben wird.

D.h. wenn das ein anderes Programm nicht korrekt implementiert, hast du keine Chance ausser über häßliches Tricksen (z.Bsp. Fenster-Handle finden und minimieren).
 
Zurück