我的问题是继续我以前的问题"SetSuspendState() API never returns in Win8“
我正在Win8 8/Win8.1 m/c上运行我的VC++代码。
我的目的是让系统进入睡眠状态&再次将系统从睡眠中自动恢复,无需任何手动“鼠标单击或键盘点击”。但我无法实现“让系统入睡,因此当然不会使系统从睡眠中恢复”。使用下面的调用SetSuspendState(),系统将永远休眠,而不是睡眠。
我再次粘贴代码片段以快速引用::
int wait = 100;
LARGE_INTEGER WaitTime;
WaitTime.QuadPart = wait;
WaitTime.QuadPart *= -10000000;
HANDLE hTimer = CreateWaitableTimer(NULL, FALSE, NULL);
if(0 == SetWaitableTimer(hTimer, &WaitTime, 0, NULL, NULL, TRUE))
{
res = false;
return res;
}
if(0 == SetSuspendState(FALSE, FALSE, FALSE))
{
res = false;
return res;
}在这里,我调用"SetSuspendState() API,它提供了使系统进入睡眠状态的选项&自动从睡眠中获取它,但是系统将进入休眠状态::
SetSuspendState(假,假,假)
有人能帮助我解决这个问题吗?我如何让我的系统“按程序”进入睡眠状态,然后在没有手动“鼠标点击或键盘点击”的情况下自动从睡眠中恢复。
发布于 2017-08-08 15:49:20
在执行睡眠之前,我们应该确保系统支持所需的睡眠状态,并且应该启用唤醒计时器,使用下面的代码进行同样的操作。
//Check support
SYSTEM_POWER_CAPABILITIES sysPowCab = {0};
if (CallNtPowerInformation(SystemPowerCapabilities, NULL, 0, &sysPowCab, sizeof(SYSTEM_POWER_CAPABILITIES)) != 0)
{
return false;
}
if (!sysPowCab.SystemS3)
{
return false;
}
return true;
//Enable allow wake up timer
GUID *pPwrGUID;
GUID subGUID = GUID_SLEEP_SUBGROUP;
GUID BriGUID = GUID_ALLOW_RTC_WAKE;
DWORD ret = PowerGetActiveScheme(NULL, &pPwrGUID);
if (ret != ERROR_SUCCESS)
{
return false;
}
ret = PowerWriteACValueIndex(NULL, pPwrGUID, &subGUID, &BriGUID, 1);
if (ret != ERROR_SUCCESS)
{
return false;
}
return true;https://stackoverflow.com/questions/18226118
复制相似问题