在/.cc预览模式下的屏幕保护程序在desk.cpl关闭后继续运行

时间:2014-02-23 11:43:38

标签: c# process windows-screensaver

上下文:

我正在使用Windows 8.1上的VS2010 .NET 4.0在C#中开发屏幕保护程序。它非常“忙”,在初始加载时访问数据库并在显示到多显示器之前进行一些图像处理。

问题:

在大多数情况下,进程干净地关闭a)鼠标/键盘在/ s模式下移动或在/ p模式下关闭desk.cpl时。当我在/ p模式(desk.cpl打开)中运行然后我发起“设置”(/ c模式)或“预览”(/ s模式)时,会出现一个问题。一旦这些新进程关闭,/ p模式将按照您的预期返回,但当desk.cpl关闭时 / p模式进程继续运行。这是间歇性的 - 但有时会关闭,有时它不会“T

在/ p模式下,我明确关闭鼠标移动等表格,因为这不适合desk.cpl预览窗口。因此,我的假设是desk.cpl会杀死我的进程,但这似乎并没有持续发生。

问题:

如何确保/ p模式一直关闭?

1 个答案:

答案 0 :(得分:0)

两种方法。您可以监视WM_DESTROY的消息泵并关闭它,或者您可以设置计时器和监视器以查看是否还有可见窗口。请注意,当控制面板替换您(关闭自身,或者用户选择新的屏幕保护程序)时,您的窗口将被隐藏,我相信会被破坏。既然你是屏幕保护程序,那么早期可能中止的风险似乎比永远持续下去的风险要小。

因此设置一个非表单计时器(如果您的窗口被销毁,表单计时器可能会被销毁),并定期检查自己。您也可以,正如有人在您的问题的评论中指出的那样,监控GetParent,看它是否发生变化。