【发布时间】:2013-11-09 18:08:04
【问题描述】:
我正在 VS2010 上使用 C# .NET4.0 开发一个屏幕保护程序,它需要在实际显示屏幕之前进行一些处理(相当复杂的数据库访问)。这很好,因为用户不知道这个处理正在进行,然后当一切准备就绪时,全屏表单就会启动。也就是说,除非我们在 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 中进行了一项设计更改,以防止屏幕保护程序在桌面图像上绘图。之前在桌面上绘制的任何屏幕保护程序都将使用您选择的“地铁”背景颜色在纯背景上绘制。实验表明,该背景会在 .scr 文件启动后立即启动,即在任何表单显示之前。因此,像最小化显示表单或以 0% 不透明度显示表单这样的技巧不起作用,因为这只会显示下面的纯背景。
我能想到的最好办法是在我的代码启动时(即在任何数据库处理或其他屏幕构建发生之前)显示全屏纯黑色表单作为第一个操作。为什么要尝试用另一个纯屏幕替换纯屏幕?好吧,因为默认的 Windows 背景颜色似乎是蓝色的。那是 BSOD 蓝色中的蓝色,当它启动时看起来有点令人震惊。因此,对于 Windows 8 用户体验,我能做的最好的事情是快速闪烁蓝色,然后是 3-4 秒的纯黑色,然后屏幕上会填充一些有意义的东西. 微软的这种新行为显然是“设计使然”。它没有在预览模式下表现出来这一事实显然是一个错误,有人认为 MS 稍后会整理。
所以我的问题是,有没有人知道解决这个问题的任何方法,以便我可以继续显示桌面,直到屏幕保护程序表单准备好启动?
【问题讨论】:
-
我认为你不应该尝试这样做,因为这仅仅意味着你试图绕过操作系统的安全措施。最好显示“屏幕保护程序正在加载”之类的消息。
-
哦,顺便说一句:您必须准备好在此期间中止加载屏幕保护程序,因为此时用户可能会重新开始工作。
-
感谢 PMF。加载过程中的中止已经编码,所以不用担心。我很想了解导致 Microsoft 进行此更改的安全风险是什么。屏幕保护程序现在是否隐含地被视为锁定屏幕?这从来都不是这个应用程序的意图。
-
我只能猜测,但我会说是的,这可能就是原因。但 google 可能会帮助您找到做出此更改的原因。
标签: c# .net windows windows-8 screensaver