微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

接收屏幕保护程序通知

当屏幕保护程序即将启动时,我希望在我的C ++应用程序中收到通知。 我试着用wParam == SC_SCREENSAVE来监听WM_SYSCOMMAND消息,这有些人认为应该这样做 。 这没有用。 间谍++甚至表明我的窗口没有收到任何WM_SYSCOMMAND消息。 有趣的是,当我closures显示器,我收到消息与wParam == SC_MONITORPOWER 。 我理解错了吗? 还是我错过了什么?

编辑:为了testing,我使用了认的Windows屏幕保护程序(与Windows徽标之一)。

使用xscreensaver编写屏幕保护程序的提示和技巧?

如何判断屏保是否被暂时禁用?

只有当我的窗口有焦点时,我才会收到SC_SCREENSAVE消息。 解决这个问题的方法是设置全局钩子 。 这将需要我把回调函数一个单独的DLL ,也有这个可怕的消息,关于挂钩减慢系统,所以我决定放弃响应屏幕保护开始的想法。

这是一个相对复杂的任务(虽然如果这很容易的话会很好)。

如果您的窗口处于焦点状态,则可以在网上找到的部分测试仅适用于该窗口。 如果它在后台运行,它可能不会收到这样的消息。

其他测试依赖于屏幕保护程序运行(检查当前设置的屏幕保护程序,然后观察进程列表以查看它是否处于活动状态),但是如果进入powersave模式,或者屏幕保护程序是黑屏(即,没有程序,只是监视关闭)。

我不相信有一个理想的方式来做到这一点。 您可能想回到起点,并更仔细地思考为什么需要检测这种状态,以及您正在尝试完成什么。 您可能需要不同的解决方案。

可能我的答案来得太晚了。

MSDN处理“传统”下的屏幕保护程序。 在笔记本电脑上,他们浪费电池,在个人电脑上也没用。 关闭显示器比显示屏幕保护程序更好。

由于您没有准确解释您想要执行的操作,因此我不知道在保存程序启动之前是否真的需要通知,或者是否已经开始通知了足够的通知

在后一种情况下,这很容易。 写一个定期检查的线程:

BOOL b_SaverRunning; SystemParametersInfo(SPI_GETSCREENSAVERRUNNING,&b_SaverRunning,0);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐