强制窗口位于最顶层的窗口之上(如任务管理器)

Ste*_* Lu 1 c c++ windows winapi

我有一个窗口,我想显示在其他一切之上.我的代码能够成功地强制它几乎在每个窗口之上,除了其他最顶层的窗口.这是我使用的代码:

SetWindowPos(getSDLWindow(),HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
Run Code Online (Sandbox Code Playgroud)

每次单击鼠标中键时都会执行此行(我使用鼠标钩来触发它).

一旦我启动我的程序,并从中点击一次,从那时起,我的窗口仍然在所有"常规"窗口之上.

但是,所有"特殊窗口"似乎与我的应用程序窗口属于同一类别,即聚焦时的特殊窗口显示在我的应用程序窗口上方.在这类特殊窗口中是任务栏(使用开始菜单似乎也激活),右键单击菜单(即使是由常规窗口生成),任务管理器,我相信很多其他人.事实上,我相当确定任何其他"最顶层"的窗口都会以这种方式运行.似乎通过我的SetWindowPos调用我已将应用程序窗口的状态提升到最顶层的窗口.

什么是我可以启动任务管理器,将其移动到我的应用程序窗口(现在它正在覆盖它),然后在任务管理器中间单击,现在我的应用程序窗口弹回到前面(同时焦点仍然是在任务管理器上).这很好,但我想更进一步,这样无论如何我的窗口都会在顶部.

除了SetWindowPos在循环中反复触发之外,还有其他方法可以实现吗?如果可能的话,我想避免这种情况.

Joh*_*ing 8

不,因为没有"超级最顶层"的旗帜.

也不应该因为所有超级最顶级的窗户都会互相争夺控制权.

  • 我喜欢这句话:"这就像说,'有时候我很匆忙,我想确保我是下一个在熟食柜台服务的人.要做到这一点,我找到数量最少的人他们昏迷不醒,偷了他们的机票.但是有时候其他人也会匆匆忙忙进来.那个人把我打昏,偷了我的机票.我的计划是设置我的手表警报,定期叫醒我,每次都是唤醒我,我找到了数量最少的人,将他们打昏,并偷走了他们的机票.有没有更好的方法?'"好的,点了.:) (6认同)