Я подозреваю, что вы можете сделать это, используя вызовы API к powrprof.dll, а также WMI, но у меня не было времени, чтобы выяснить этот подход.
Этот параметр выглядит просто как логическое значениераздел реестра, расположенный в соответствии с вашим текущим планом электропитания:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Power \ User \ PowerSchemes \ (GUID текущей схемы электропитания) \ (GUID категории сна) \ (ВключитьGUID таймеров пробуждения переменного или постоянного тока) = 0 или 1
Вместо того, чтобы непосредственно манипулировать реестром, более чистый подход - включить эти параметры с помощью powercfg.exe.
Для питания переменного тока:
powercfg.exe -SETACVALUEINDEX SCHEME_CURRENT SUB_SLEEP bd3b718a-0680-4d9d-8ab2-e1d2b4ac806d 1
Для батарей:
powercfg.exe -SETDCVALUEINDEX SCHEME_CURRENT SUB_SLEEP bd3b718a-0680-4d9d-8ab2-e1d2b4ac806d 1
РЕДАКТИРОВАТЬ:
Это позволяет включить таймеры пробуждения в моей системе при работеот сети переменного тока с использованием высокопроизводительной схемы питания (исключительно в качестве подтверждения концепции):
[DllImport("powrprof.dll", EntryPoint = "PowerWriteACValueIndex", CharSet = CharSet.Auto, SetLastError = true)]
public static extern uint PowerWriteACValueIndex(IntPtr RootPowerKey, ref Guid SchemeGuid, ref Guid SubGroupOfPowerSettingsGuid, ref Guid PowerSettingGuid, uint AcValueIndex);
public static void EnableWakeTimers()
{
Guid Root = new Guid("8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c"); // High Performance GUID
Guid Sleep = new Guid("238c9fa8-0aad-41ed-83f4-97be242c8f20"); // Sleep Subcategory GUID
Guid WakeTimers = new Guid("bd3b718a-0680-4d9d-8ab2-e1d2b4ac806d"); // Wake Timers GUID
PowerWriteACValueIndex(IntPtr.Zero, ref Root, ref Sleep, ref WakeTimers, 1);
}
Это ваш друг: http://msdn.microsoft.com/en-us/library/aa373163%28v=vs.85%29.aspx