2011-03-10 16 views
7

Pencerenin önüne getirmek istiyorum (diğer uygulamalardan). Şu anda kullanıyorum:Diğer uygulama pencereleri etkinleştirilmeden nasıl ön tarafa getirilir?

::SetWindowPos(hwnd, GetForegroundWindow(), 0, 0, 0, 0, SWP_ASYNCWINDOWPOS | SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); 

Düzgün çalışır, ancak bazı (bana bilinmeyen) durumlarda, üstte her zaman penceresi yapar. MSDN'ye göre, GetForegroundWindow() yerine HWND_NOTOPMOST kullanmalıyım, ancak çalışmıyor - pencere diğer (her zaman üstte değil) pencerelerinin altında kalır.

Bir pencereyi etkinleştirmeden nasıl öne getirebilirim?

+0

Belgeler, "HWND_NOTOPMOST" öğesinin "pencere zaten en üstte olmayan bir pencere olması durumunda hiçbir etkisi olmadığını" söylüyor. –

+0

Burada bazı alternatifler: http://stackoverflow.com/questions/916259/win32-bring-a-window-to-top –

+0

* Diğer soruya verilen cevapların hiçbiri iyi bir çözüm değildir. Bütün bu soru sadece bir karmaşa. David cevabını burada aldı. –

cevap

11

diğer uygulamanın pencere geçici olarak 'en üstteki ilk bir SetWindowPos çağrıda 'hWndInsertAfter' olarak HWND_TOPMOST belirterek ve daha sonra ikinci bir çağrı HWND_NOTOPMOST belirterek, etkinleştirmeden önüne getirmek için (her iki çağrıları yapılabilir 'uFlags' içinde SWP_NOACTIVATE ile). İşlemin bir sonucu olarak en üstteki pencerenin en üst stilini kaldırma riski varsa, WS_EX_TOPMOST eski stili, GetWindowLong[Ptr] numaralı çağrıyla önceden test edilebilir.

Diğer uygulamanın penceresinin önünde olması gereken belirli bir pencere varsa (tüm pencerelerin önünde bulunmak yerine), pencerenin sahibi geçici olarak ön camda olması gereken pencereye ayarlanabilir. . GetWindowLong[Ptr], GWL_HWNDPARENT ile pencerenin orijinal sahibini saklamak için kullanılabilir, daha sonra geçici sahibi ayarlamak için SetWindowLong[Ptr] aramasını ve ardından ile HWND_TOP numaralı telefonu arayın ve sonra orijinal sahibini tekrar SetWindowLong[Ptr] ile geri yükleyin.

+0

Bu, pencerenin giriş odağı olmadığı zaman işe yarar mı? –

+0

@David - Evet, W7 üzerinde test edildi, ör. Etkinleştirmeksizin üstüne bir 'Notepad' penceresi getirebilirim. –

İlgili konular