我正在VS2010上开发C#.NET4.0中的屏幕保护程序,它在实际显示屏幕(相当复杂的数据库访问)之前需要进行一定程度的处理。这很好,因为用户不知道这个处理正在进行,然后当一切准备就绪时,全屏幕表单就会启动。也就是说,除非我们在Windows 8上运行。屏幕保护程序如何在Windows 8中继续绘制桌面?
在Microsoft社区搜索(http://answers.microsoft.com/en-us/windows/forum/windows_8-desktop/bubbles-screensaver-has-black-background/e0807324-5ca6-4abe-b6ba-716848b41ff5?page=4)显示在Windows 8中进行了设计更改,以防止屏幕保护程序绘制桌面图像。之前绘制在桌面上的任何屏幕保护程序都会使用您选择的“metro”背景颜色绘制纯色背景。实验表明,这种背景会立即启动.scr文件,即在任何表单可以显示之前。因此,像最小化显示形式或0%不透明度这样的技巧是行不通的,因为这仅仅揭示了底下的简单背景。
我已经能够提出的最好的方法是,当我的代码开始时,即在任何数据库处理或其他屏幕构建发生之前,将全屏纯黑色窗体显示为第一个动作。为什么试图用另一个普通屏幕取代普通屏幕?那么,因为默认的Windows背景颜色似乎是蓝色的。蓝色就像BSOD蓝色一样,它在启动时看起来有点令人担忧。所以我为Windows 8用户体验做的最好的事情就是快速闪烁的蓝色,然后是3-4秒的纯黑色,然后屏幕上会显示一些有意义的内容。 微软的这种新行为显然是“按设计”。事实上,它并不以预览模式显示,显然是一个假设MS稍后会整理的错误。
所以我的问题是没有人知道任何解决方法,这样我就可以继续桌面显示,直到屏幕保护程序形式准备好踢?
我不认为你应该尽量做到这一点,因为它仅仅意味着你试图绕过操作系统的安全性措施。最好展示一个“屏幕保护程序正在加载”的消息。 – PMF
哦,顺便说一下:在这段时间内,您必须准备好放弃加载屏幕保护程序,因为用户可能在此刻重新开始工作。 – PMF
谢谢PMF。加载过程中的中止已经被编码,所以不用担心。我很想知道Microsoft带来这种变化的安全风险是什么。屏幕保护程序现在是否被视为锁定屏幕?这从来不是这个应用程序的意图。 – ifinlay