Mutex und SetForeGroundWindow
-
Ich habe einen Mutex in mein Programm bei OnInitDialog eingebunden.
Die Anwendung darf also nicht mehrfach gestartet sein.Nun würde ich aber auch gerne wenn der Mutex gefunden wurde das
bereits offene Programm direkt wieder anzeigen. Mein Ansatz, der
aber dahingehend nichts bewirkte:CWnd* wnd; wnd=CWnd::FindWindow(NULL,"TestApp"); if(wnd!=NULL) { //hier komme ich auch an... wnd->SetForegroundWindow(); //wnd->SetFocus(); //wnd->SetActiveWindow(); }Wie bringe ich die Anwendung denn dann wieder zur Anzeige

-
Ab Win98/Me und Win2000 gibt es eine Sperre beim Aktivieren des eigenen Fensters in den Vordergrund!
Ein Prozeß kann nur dann sein eigenes Fenster in den Vordergrund bringen und/oder aktivieren, wenn folgende Bedingungen erfüllt sind:
-The process is the foreground process.
-The process was started by the foreground process.
-The process received the last input event.
-There is no foreground process.
-The foreground process is being debugged.
-The foreground is not locked (see LockSetForegroundWindow).
-The foreground lock time-out has expired (see SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo).
Zusätzlich gilt ab Win2000/XP folgende Bedingung:
-No menus are active.Diese Sperre kann jedoch umgangen werden indem wir uns kurz auf den selben ThreadInput, der aktuell im Vordergrund ist, attachen.
Damit gehören wir beide zum selben ThreadInput und können SetForeGroundWindow() durchführen.Suche mal nach den Begriffen AttachThreadInput() UND SetForegroundWindow(), damit dürfte Dir geholfen werden

Martin