c – 如何将其他应用程序窗口置于正面而不激活它?

我想把一个窗口(从其他应用程序)带到前面.目前我正在使用:
::SetwindowPos(hwnd,GetForegroundWindow(),SWP_ASYNCWINDOWPOS | SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);

它工作正常,但在一些(我不知道)的情况下,它使窗口始终在顶部.根据MSDN,我应该在GetForegroundWindow()的位置使用HWND_NOTOPMOST但它不起作用 – 窗口停留在其他(不总是在顶部)窗口下.

如何在不激活前面的情况下将窗户拉到前面?

解决方法

一个应用程序的窗口可以暂时“最顶层”将其置于前面而不激活它,首先在SetwindowPos调用中将HWND_TOPMOST指定为’hWndInsertAfter’,然后在第二个调用中指定HWND_NOTOPMOST(两个调用都使用SWP_NOOPTIVATE’ uFlags’).如果由于操作而有可能删除已经是最顶层的窗口的最顶层样式,则可以事先通过调用getwindowlong [Ptr]来测试WS_EX_TOPMOST ex-style.

如果有一个特定的窗口,其他应用程序的窗口需要在前面(而不是在所有窗口的前面),那么该窗口的所有者可以再次临时设置到它需要在前面的窗口.具有GWL_HWNDPARENT的getwindowlong [Ptr]可用于存储窗口的原始所有者,然后调用SetwindowLong [Ptr]来设置临时所有者,然后使用HWND_TOP调用SetwindowPos,然后再次使用SetwindowLong [Ptr]恢复原始所有者].

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...