2013-04-10 10 views
7

Potrzebuję do przywrócić ("un-minimize") okno WPF, które zostało już utworzone, ale okno, które jest obecnie na górze (niekoniecznie WPF) nie może utracić ostrości ani aktywacji. Próbowałem używać wszystkich funkcji WIN32, które mogę znaleźć, bezskutecznie. Staje się teraz naprawdę sfrustrowany, naprawdę doceni wszelkie wskazówki i wskazówki.Jak przywrócić okno bez ustawiania ostrości za pomocą WPF (lub interop)

Oczywiście zmiana na WindowState.Normal w WPF nie odcina go, ponieważ powoduje to, że okno otrzymuje ostrość i aktywację. Próbowałem również różnych kombinacji z ustawieniami Hidden i IsEnabled podczas przywracania.

Próbowałem WIN32 SetWindowPos z HWND_TOP, HWND_TOPMOST itp., Ale ta funkcja nie ma na celu przywrócenia systemu Windows i zmieni tylko pozycję już "wyświetlanych" okien.

Wypróbowałem WIN32 ShowWindow i SetWindowPlacement ale nie było tam też szczęścia. Próbowaliśmy desperacką próbę dodanie HwndHook spróbować słuchać WM_SETFOCUS i przywrócenie ostrości do oryginalnego okna, ale ja tylko dostać zero dla ostatniego aktywnego okna uchwyt ..

Edycja - rozwiązanie z rozszerzeniem okna po końcówki od Joel Lucsy :

public static class RestoreWindowNoActivateExtension 
{   
    [DllImport("user32.dll")] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    static extern bool ShowWindow(IntPtr hWnd, UInt32 nCmdShow); 

    private const int SW_SHOWNOACTIVATE = 4; 

    public static void RestoreNoActivate(this Window win) 
    { 
     WindowInteropHelper winHelper = new WindowInteropHelper(win); 
     ShowWindow(winHelper.Handle, SW_SHOWNOACTIVATE); 
    } 
} 
+0

Czy możesz wpisać swój obecny kod, proszę? –

+0

Mogę opublikować kod, jeśli naprawdę czujesz, że jest potrzebny, ale ponieważ jest to po prostu bałagan prób używania różnych połączeń, nie jest to zbyt wiele do oglądania. Napiszę coś, jeśli uda mi się go uruchomić, ale ... – Niclas

Odpowiedz

6

połączeń ShowWindow minięciu flagę SW_SHOWNOACTIVATE.

+0

Naprawdę starałem się osiągnąć ten wynik, przekazując wszystkie kombinacje parametrów, które mogłem wymyślić. Do tej pory jestem przekonany, że SetWindowPos nie może być użyty do przywrócenia okna, ale bardzo chciałbym, aby mi się nie udało :) – Niclas

+1

Co powiesz na ShowWindow z SW_SHOWNOACTIVATE? –

+0

+1 Edytowałem twoją odpowiedź, aby podać poprawną odpowiedź. Nie ma sensu pozostawiać tam oryginalnej odpowiedzi, która nie działa. –

Powiązane problemy