Für ein Projekt benötigte Ich die Möglichkeit per Tastenkombination ein Fenster definitiv in den Vordergrund zu holen. Ein gutes Beispiel wäre ein Instant Messenger der automatisch seine Chatfenster aufploppen lässt, sobald eine Nachricht eintrifft.
Dazu benötigt man ein paar DLL-Imports aus der user32.dll :
[DllImport("user32.dll")] static extern bool IsIconic(IntPtr hWnd); [DllImport("user32.dll")] private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); /// Win32 API Constants for ShowWindowAsync() public const int SW_HIDE = 0; public const int SW_SHOWNORMAL = 1; public const int SW_SHOWMINIMIZED = 2; public const int SW_SHOWMAXIMIZED = 3; public const int SW_SHOWNOACTIVATE = 4; public const int SW_RESTORE = 9; public const int SW_SHOWDEFAULT = 10;
Nun steht uns nichts mehr im Weg.
IntPtr pWindow = new WindowInteropHelper( System.Windows.Application.Current.MainWindow).Handle; System.Windows.Window actWnd = Application.Current.MainWindow; if (IsIconic(pWindow)) { ShowWindowAsync(pWindow, SW_RESTORE); } else { if (!(actWnd.IsActive)) { while( !(SetForegroundWindow(pWindow) > 0 )) ; ShowWindowAsync(pWindow, SW_SHOWDEFAULT); } else ShowWindowAsync(pWindow, (SW_SHOWMINIMIZED)); } }
Zunächst wird geprüft ob das Fenster minimiert ist. Wenn ja, wird der Status des Fensters mit Hilfe des Befehls SW_RESTORE auf wiederherstellen gesetzt. Ist das Fenster nicht minimiert, wird zunächst geprüft ob das Fenster im Hintergrund anderer Fenster liegt. In diesem Fall wird der Befehl SetForeGroundWindow so lange an die Anwendung geschickt, bis das Fenster wieder sichtbar auf dem Desktop steht. Ansonsten wird unsere Anwendung minimiert.
Links
http://www.thejaeck.net/2009/05/17/fenster-in-den-vordergrund-holen-c/trackback/
0 Kommentare vorhanden
Kommentar schreiben!