避免来自其他软件的所有系统消息和消息

Ran*_*lue 10 c windows

情况就是这样.我工作的公司在c中构建这个软件,可以使Windows计算机有点像电视.从本质上讲,我们的软件是全屏播放的,内容是从互联网上显示的,用户不必再次触摸电脑.

问题在于,系统偶尔会出现"您的Windows系统已准备好升级"等弹出窗口.或"请更新您的诺顿订阅"等用户必须定期并手动删除.

有没有办法在不受这些警告困扰的情况下全屏显示内容?

Ben*_*yne 13

是的,无论开发社区是否同意,微软都有几个关于何时以及为什么可以接受独家使用显示器的标准.

最官方的策略是在独占模式下使用DirectX.这就是游戏的功能,Windows媒体播放器在启用硬件加速的全屏视频中的作用等等...... 如果您的应用程序是多媒体密集型的(如电视功能所示),您可能也应该使用DirectX.除了为您提供独有的显示访问权限外,它还可以提高您的应用程序性能,同时降低CPU负载(因为它会在可能的情况下使图形工作过载到视频卡).

如果DirectX不是一个选项,那么可用的大量黑客在不同代的Windows操作系统之间似乎都表现不同.因此,您可能必须准备好实施几种技术来涵盖您计划支持的每个操作系统.

一种技术是将您的应用程序设置为当前运行的屏幕保护程序.屏幕保护程序如果真的只是一个EXE重命名为SCR,它应该支持某些命令行开关.但是您可以将自己的应用程序编写为屏幕保护程序和一个小启动程序存根,将其设置为屏幕保护程序并启动它.退出时,应用程序应返回原始屏幕保护程序设置(可能启动程序等待进程退出,以便它返回优雅出口和任何计划外进程终止的设置,即:应用程序崩溃).我不确定这种行为在各个平台上是否一致,但您必须对其进行测试.

防止其他应用程序创建窗口句柄在我看来真的是一个黑客,而且我不喜欢作为此类软件的客户.

不断BringWindowToTop()调用让你保持领先是更好的(它不会破坏其他软件),但仍然有点黑客攻击.


kol*_*kol 7

使用全局钩子捕获窗口创建消息.这样,您可以在不需要的窗口可见之前关闭或隐藏它们.

编辑:如果你肯定想避免钩子,那么你可以定期调用一个函数,它将你的窗口放在z-stack的顶部.