Здравствуйте, VAMPIRIO, Вы писали:
VAM>подскажите на примере как разрешить и как запретить использование спящего режима
Общий подход:
#define _WIN32_WINNT 0x0500
#include <windows.h>
extern "C" {
#include <powrprof.h>
}
#include <stdlib.h>
#include <memory.h>
#include <stdio.h>
#include <crtdbg.h>
#pragma comment(lib, "powrprof.lib")
int main(void)
{
UINT uScheme;
POWER_POLICY Policy;
if (!GetActivePwrScheme(&uScheme))
{
printf("GetActivePwrScheme failed (0x%08X)\n", GetLastError());
return -1;
}
if (!ReadPwrScheme(uScheme, &Policy))
{
printf("ReadPwrScheme failed (0x%08X)\n", GetLastError());
return -1;
}
/* изменяем здесь power policy соответствующим образом */
...
if (!SetActivePwrScheme(uScheme, NULL, &Policy))
{
printf("SetActivePwrScheme failed (0x%08X)\n", GetLastError());
return -1;
}
return 0;
}
Теперь о том, какие поля структуры POWER_POLICY нужно изменить, чтобы добиться нужного эффекта. Чтобы полностью отключить переход в спящий режим (standby), вместо многоточия нужно поставить следующие строчки:
Policy.user.IdleAc.Action = PowerActionNone;
Policy.mach.DozeS4TimeoutAc = 0;
Чтобы включить спящий режим по истечении 15 минут отсутствия активности
Policy.user.IdleAc.Action = PowerActionSleep;
Policy.user.IdleAc.Flags = POWER_ACTION_QUERY_ALLOWED;
Policy.user.IdleAc.EventCode = 0;
Policy.user.IdleTimeoutAc = 15 * 60;
Приведенный выше код изменяет только политику для питания от сети. Для питания от батарей, нужно использовать аналогичные поля структуры с суффиксом Dc.