про разрешение использования спящего режима
От: VAMPIRIO  
Дата: 31.07.03 02:23
Оценка:
подскажите на примере как разрешить и как запретить использование спящего режима
Re: про разрешение использования спящего режима
От: Alex Fedotov США  
Дата: 31.07.03 05:53
Оценка: 51 (6)
Здравствуйте, 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.
-- Alex Fedotov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.