我有一个C#winforms应用程序在另一个程序中运行宏.另一个程序将不断弹出窗口,并且通常会让事情看起来,因为缺乏一个更好的词,是疯狂的.我想实现一个取消按钮来阻止进程运行,但我似乎无法让窗口保持在最顶层.我如何在C#中执行此操作?
编辑:我试过TopMost = true; ,但另一个程序不断在顶部弹出自己的窗口.有没有办法每隔n毫秒将窗口发送到顶部?
编辑:我解决这个问题的方法是添加一个系统托盘图标,通过双击取消该过程.系统托盘图标不会被遮盖.谢谢所有回复的人.我读了一篇关于为什么没有"超级顶级"窗口的文章......它在逻辑上不起作用.
即使其他应用程序在Fullscreen上运行,是否可以使窗口始终保持在顶部?我正在使用TopMost = true,但当其他应用程序在全屏运行时,我的隐形.WindowStyle = None顺便说一句,这是窗口.
编辑:不要让其他窗口最小化
我有一个窗口,我想显示在其他一切之上.我的代码能够成功地强制它几乎在每个窗口之上,除了其他最顶层的窗口.这是我使用的代码:
SetWindowPos(getSDLWindow(),HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
Run Code Online (Sandbox Code Playgroud)
每次单击鼠标中键时都会执行此行(我使用鼠标钩来触发它).
一旦我启动我的程序,并从中点击一次,从那时起,我的窗口仍然在所有"常规"窗口之上.
但是,所有"特殊窗口"似乎与我的应用程序窗口属于同一类别,即聚焦时的特殊窗口显示在我的应用程序窗口上方.在这类特殊窗口中是任务栏(使用开始菜单似乎也激活),右键单击菜单(即使是由常规窗口生成),任务管理器,我相信很多其他人.事实上,我相当确定任何其他"最顶层"的窗口都会以这种方式运行.似乎通过我的SetWindowPos调用我已将应用程序窗口的状态提升到最顶层的窗口.
什么是我可以启动任务管理器,将其移动到我的应用程序窗口(现在它正在覆盖它),然后在任务管理器中间单击,现在我的应用程序窗口弹回到前面(同时焦点仍然是在任务管理器上).这很好,但我想更进一步,这样无论如何我的窗口都会在顶部.
除了SetWindowPos在循环中反复触发之外,还有其他方法可以实现吗?如果可能的话,我想避免这种情况.