Таймер переключения Windows в спящий режим

Как в C# считать значения таймера, по которому ОС переключает комп в спящий режим? Может какой-то WMI класс это позволяет? Надо, чтобы до засыпания компа успеть сделать ряд действий из приложения. Когда сработал event - мне уже поздно... Надо за 1 минуту до срабатывания таймера выполнить ряд операций...

Либо второй вариант: не допустить включения спящего режима. М.б. в WMI есть доступ к параметру управления электропитанием. Я бы из своего приложения устанавливал в нем "Никогда", для того, чтоб пользователь при использовании моего приложения не мог назначать режим энергосбережения.


Ответы (2 шт):

Автор решения: Alexander Petrov

Используйте SystemEvents.

Подпишитесь на событие PowerModeChanged и в его обработчике выполняйте нужные действия.

static void Main(string[] args)
{
    SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
    Console.ReadLine();
}

private static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
{
    if (e.Mode == PowerModes.Suspend)
        Console.WriteLine("sleep");
    else
        Console.WriteLine("awake");
}

Я только что опробовал этот код в консольном приложении. Работает.


Надо за 1 минуту до срабатывания таймера выполнить ряд операций

С помощью функции GetLastInputInfo определяете, когда система находится в состоянии простоя. И запускаете свой таймер с интервалом срабатывания на минуту меньше, чем время до перехода в спящий режим.

Единственная проблема: с ходу я не нашёл, как узнать это время до перехода в спящий режим.

→ Ссылка
Автор решения: Altom

Нашёл. Поверил. Работает (типа Veni, Vidi, Vici?) CallNtPowerInformation с параметром 12.

→ Ссылка