gpt4 book ai didi

c++ - 如何在不激活的情况下将其他应用程序窗口置于最前面?

转载 作者:可可西里 更新时间:2023-11-01 13:05:35 25 4
gpt4 key购买 nike

我想把一个窗口(来自其他应用程序)带到前面。目前我正在使用:

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

它工作正常,但在某些(我不知道的)情况下,它会使窗口始终位于顶部。根据 MSDN,我应该使用 HWND_NOTOPMOST 代替 GetForegroundWindow() 但它不起作用 — 窗口停留在其他(不总是在顶部)窗口下方。

如何在不激活窗口的情况下将其置于最前面?

最佳答案

可以将另一个应用程序的窗口临时设置为“最顶层”,以便在不激活它的情况下将其置于最前面,首先通过在 SetWindowPos 中将 HWND_TOPMOST 指定为“hWndInsertAfter”调用,然后在第二次调用中指定 HWND_NOTOPMOST(两次调用都在“uFlags”中使用 SWP_NOACTIVATE)。如果由于操作而存在删除已经是最顶层窗口的最顶层样式的风险,则可以通过调用 预先测试 WS_EX_TOPMOST ex 样式GetWindowLong[Ptr].

如果有其他应用程序的窗口需要位于前面的特定窗口(而不是位于所有窗口的前面),则可以再次临时将该窗口的所有者设置为它需要位于前面的窗口。 GetWindowLong[Ptr]GWL_HWNDPARENT 可用于存储窗口的原始所有者,然后调用 SetWindowLong[Ptr] 设置临时所有者,然后使用 HWND_TOP 调用 SetWindowPos,然后再次使用 SetWindowLong[Ptr] 恢复原始所有者。

关于c++ - 如何在不激活的情况下将其他应用程序窗口置于最前面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5257977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com