2011-11-04 64 views
10

这里是情况。我工作的公司使用c语言编写这个软件,可以使Windows电脑的操作有点像电视。实质上,我们的软件意味着全屏播放,并且从互联网上显示内容,而用户不必再次触摸计算机。避免来自其他软件的所有系统消息和消息

的问题是,在一段时间后,系统将弹出的弹出窗口,如“您的Windows系统已准备好进行升级。”或“请更新您的诺顿订阅”等,用户必须定期和手动删除。

有没有一种方法来显示内容全屏幕而不被这些警告打扰?

+4

Hmya,这些消息是非常重要的。认为你的应用程序是最重要的是一场难以取胜的战斗。压制“主板着火”的通知也是颇有疑问的。你必须说服Windows用户正在使用该窗口。有点困难与电视应用程序。使用SendInput()函数可以生成一些假输入。 –

+5

大声笑,我不知道有一个“主板是着火”通知 – Randomblue

+5

你可以用喷火枪测试它。 –

回答

13

严,开发社区是否不同意,微软对何时以及为什么它可能是可以接受的专用显示器的几个标准。

最正式的策略是在独占模式下使用DirectX。这就是做游戏,媒体播放器硬件加速全屏视频功能等做了什么窗户...... 如果你的应用是多媒体密集型(由电视所建议的一样的功能),你或许应该使用的DirectX太。除了给你独占显示访问权限外,它还可以提高你的应用程序性能,同时降低CPU负载(因为它可能会使图形工作超载到视频卡上)。

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

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

防止其他应用程序创建窗口句柄是真正的在我看来,一个黑客和非常糟糕的一个,我不会欣赏这样的软件的客户。

恒定BringWindowToTop()通话,让你在面前的是更好的(它不会破坏其他软件),但还是有点劈十岁上下。

7

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

编辑:如果你确实想避免挂钩,那么你可以定期调用一个函数,这会让你的窗口到达z堆栈的顶部。

+1

我觉得这样的钩子有点矫枉过正...... S –

+1

几年前我有同样的问题,找不到更简单的方法。尤其难看的是,您必须使用DLL作为全局钩子的代码。 – kol

3

如果您不需要键盘或鼠标的输入法软件,如何运行你的应用程序作为screensaver

3

许多thoses消息由Windows资源管理器触发/管理。 只需用您的虚拟c#/ winform替换它。 通过更改注册表值

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] 
"Shell"="Explorer.exe" 

您可以指定几乎所有的exe文件,以替代EXPLORER.EXE 这是所有基于Windows的(嵌入式)系统(ATM &共)做的方式。 还有一些调整(禁用你不需要的服务/ dr watson &其他),当然,你会想保持一个“重启explorer.exe”的后门。 但这是一个好开始

+0

通过这种方式,您可以直接从Microsoft获得特定且高效的支持(如果需要),而且大多数情况下不会受到任何肮脏的黑客攻击。 – 131

+0

Windows更新消息可能会被浏览器触发,但绝对不是第三方“敬酒”。除了提到的诺顿,还有MS Outlook,Google Talk,MSN Messanger等等。作为一名C#开发人员,我甚至可以在一些不依赖于浏览器的应用程序中创建自己的Toast消息。我想我上面的假设是,这是一个消费者应用程序,而不是嵌入式设备,或者他们可能会授权微软的嵌入式操作系统,如XP嵌入式。这是一个精简版的Windows,专门用于作为专用设备的建议。 – BenSwayne