我正在编写这个用户模式的可执行文件,它可以在登录用户的上下文中从Windows平台上的本地服务中运行。它的主要目的是配置所有登录用户的桌面。它调用以下API来设置屏幕保护程序:
if(!SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT, nTimeoutSec, 0, 0))
{
//Error
GetLastError();
}
if(!SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, nActive, 0, 0))
{
//Error
GetLastError();
}上面的代码在大多数情况下都是有效的,除非我有多个用户登录到Windows时,我得到了这个奇怪的错误ERROR_OPERATION_IN_PROGRESS。我查了一下文档,它有这样的解释:
如果机器已进入节电模式或系统锁定状态,则会发生ERROR_OPERATION_IN_PROGRESS异常。
好的,但是我该如何处理这个错误呢?
PS。这种情况在Windows 8上最常见。
发布于 2012-08-13 07:02:08
SPI_SETSCREENSAVEACTIVE可以产生一些错误而什么也不做。尝试向WM_SYSCOMMAND窗口发送带有SC_SCREENSAVE消息的GetDesktopWindow()。
发布于 2016-05-12 21:55:00
好的,看起来这在Windows中是不可能的,尽管它没有在8+上显式地声明。
我的研究
它确实在另一篇针对SetThreadExecutionState的MSDN文章中声明,在Windows8上,ES_DISPLAY_REQUIRED标志不会唤醒屏幕。
Windows 8:此标志只能保持显示打开,不能打开当前关闭的显示器。
有一个用于删除活动屏幕保护程序的API调用(SETSCREENSAVEACTIVE确实声明了以下内容:
如果机器已进入节电模式或系统锁定状态,则会发生ERROR_OPERATION_IN_PROGRESS异常。
结论
系统没有处于锁定状态,也没有处于节能模式(使用储蓄,因此似乎8+机器无法唤醒屏幕。
https://stackoverflow.com/questions/11928953
复制相似问题