ShellExecute und eigenes Fenster oben halten
-
Hallo!
Ich starte ein Programm oder mit ShellExecuteEx. Der nShow-Parameter der SHELLEXECUTEINFO-Struktur ist SW_SHOWNA.
Das zu startende Programm ist immer im Vordergrund. Ich würde aber gerne ein Programm starten und mein Awendungsfenster soll aktiv und im Vordergrund bleiben. Wie machen ich das ?
P.S.: SW_SHOWMINNOACTIVE, BringWindowToTop, SetForeGroundWindow habe ich bereits erfolglos ausprobiert.
-
Ist das Programm von Dir?
Evtl. bringt es sich selbst in den Vordergrund!Probiere es mal mit was neutralem aus (Notepad etc.)
-
Martin Richter schrieb:
Ist das Programm von Dir?
Evtl. bringt es sich selbst in den Vordergrund!Probiere es mal mit was neutralem aus (Notepad etc.)
Ja, das Programm ist von mir. Ist eine Dialog Anwendung. Mit notepad.exe habe ich es auch schon probiert. Das Fenster ist auch im Vordergrund nur nicht aktiv.
Hier nochmal der Code, vielleicht ist ewtas faul:
::SHELLEXECUTEINFO see = {0}; see.cbSize = sizeof(::SHELLEXECUTEINFO); see.fMask = 0x00000000; // SEE_MASK_DEFAULT see.lpVerb = _T("open"); see.lpFile = _T("notepad.exe"); // ApplicationName.GetString() see.nShow = SW_SHOWNA; ::ShellExecuteEx(&see); // hilft auch nichts this->BringWindowToTop(); this->SetForegroundWindow();
-
Hallo,
vl. vorher noch AllowSetForeGroundWindow ausprobieren!
http://msdn.microsoft.com/en-us/library/ms632668%28VS.85%29.aspx
-
Allow schrieb:
Hallo,
vl. vorher noch AllowSetForeGroundWindow ausprobieren!
http://msdn.microsoft.com/en-us/library/ms632668%28VS.85%29.aspxDaran sollte es ja nicht scheitern, denn es ist "mein eigenes" Fenster, welches ich in den Vordergrund bringen möchte.
-
Versuch mal mit einem Timer das
this->BringWindowToTop();
this->SetForegroundWindow();zu entkoppeln / verzögern.
Wahrscheinlich ist die zu Anwendung noch nicht "ganz" geladen bzw. die "MessageQueue" der neuen Anwendung noch nicht im IDLE, so daß sie sich nach dem Bring.. und SetFor.. wieder in dem Vordergrund schiebt..
Evtl. hilft WaitForIdle + x msec bis Du daß Bring.. und SetFor.. Deiner Anwendung aufrufst, aber ich finde es "sicherer" dies über eine Entkopplung also Timer zu machen..
Gruß
Marcus