C++ 系统参数信息和错误操作正在进行中

C++ 系统参数信息和错误操作正在进行中,c++,winapi,windows-8,screensaver,usermode,C++,Winapi,Windows 8,Screensaver,Usermode,我正在编写这个用户模式可执行文件,它可以在登录用户的上下文中从Windows平台上的本地服务运行。其主要目的是为所有登录用户配置桌面。它调用以下API来设置屏幕保护程序: if(!SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT, nTimeoutSec, 0, 0)) { //Error GetLastError(); } if(!SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, nActiv

我正在编写这个用户模式可执行文件,它可以在登录用户的上下文中从Windows平台上的本地服务运行。其主要目的是为所有登录用户配置桌面。它调用以下API来设置屏幕保护程序:

if(!SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT, nTimeoutSec, 0, 0))
{
    //Error
    GetLastError();
}

if(!SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, nActive, 0, 0))
{
    //Error
    GetLastError();
}
上面的代码在大多数情况下都能正常工作,除了当我有多个用户登录到Windows控制台时,我会遇到这种奇怪的错误操作。我查了一下,它有这样的解释:

如果机器已进入节电模式或系统锁定状态,则 发生错误\操作\进行中\异常

好的,但是我该如何处理这个错误呢


注:这种情况在Windows 8上最常见。

SPI设置屏幕激活
可能会产生一些错误,并且什么也不做。尝试向
GetDesktopWindow()
窗口发送with
SC\u SCREENSAVE
消息。

确定,因此看起来这在Windows 8+中实际上是不可能的,尽管MSDN中没有明确说明

我的研究 它在另一篇MSDN文章中指出,在Windows 8上,ES_DISPLAY_REQUIRED标志不会唤醒屏幕

Windows 8:此标志只能使显示器保持打开状态,不能打开当前已关闭的显示器

有一个用于删除活动屏幕保护程序的API调用()说明了以下内容:

如果机器已进入节电模式或系统锁定状态,则会发生错误操作进行中异常

结论
系统未处于锁定状态,也未处于节能模式(使用),因此Windows 8+机器似乎无法唤醒屏幕。

感谢您的建议,但目前我无法模拟这种情况。。。知道什么时候会返回错误吗?