簡體   English   中英

如何在不激活的情況下將其他應用程序窗口置於前面?

[英]How to bring other app window to front without activating it?

我想把一個窗口(來自其他應用程序)帶到前面。 目前我正在使用:

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

它工作正常,但在一些(我不知道)的情況下,它使窗口始終在頂部。 根據MSDN,我應該在GetForegroundWindow()的位置使用HWND_NOTOPMOST但它不起作用 - 窗口停留在其他(並不總是在頂部)窗口下。

如何在不激活前面的情況下將窗戶拉到前面?

其他應用程序的窗口可以暫時成為“最上面的”通過指定把它前面沒有激活它,首先HWND_TOPMOST作為一個“hWndInsertAfter” SetWindowPos呼叫,然后通過指定HWND_NOTOPMOST在第二個呼叫(包括電話SWP_NOACTIVATE在' uFlags')。 如果由於操作而有可能刪除已經是最頂層的窗口的最頂層樣式,則可以事先通過調用GetWindowLong[Ptr]來測試WS_EX_TOPMOST ex-style。

如果有一個特定的窗口,其他應用程序的窗口需要在前面(而不是在所有窗口的前面),那么該窗口的所有者可以再次臨時設置到它需要在前面的窗口。 具有GWL_HWNDPARENT GetWindowLong[Ptr]可用於存儲窗口的原始所有者,然后調用SetWindowLong[Ptr]來設置臨時所有者,然后使用HWND_TOP調用SetWindowPos ,然后再次使用SetWindowLong[Ptr]恢復原始所有者SetWindowLong[Ptr]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM