Разрешить таймеры пробуждения Windows 7/Vista
Мне нужно разрешить WakeTimers (компьютер просыпается из спящего режима / режима гибернации) для всех планов электропитания, установленных на подключенном к включенному.
параметры питания">
Я пробовал Win32_PowerSetting, но он работает только на английской версии Windows.
Мне нужно использовать.NET 2.0
Спасибо за отзывы!
4 ответа
Я подозреваю, что вы можете сделать это, используя вызовы 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
Я написал этот сценарий powershell для включения или выключения таймеров пробуждения на всех текущих схемах питания. Во второй последней строке "POWERCFG -setacvalueindex $xAll $xSubGuid $zz 1" - включение 1 означает. Просто измените это на 0, чтобы отключить.
CLS
#Capture Current Active Power Scheme
$orgScheme = POWERCFG -GETACTIVESCHEME
$yOrg = $orgScheme -split "\s+"
$xOrg = $yOrg[3]
Write-host Original Scheme = $xOrg
Echo __________________________________
Echo " "
$allScheme = POWERCFG /L
#Echo $allScheme
foreach ($line in $allScheme)
{
if ($line.Length -gt 40)
{
if ($line.substring(0,5) -eq "Power")
{
$yAll = $line -split "\s+"
$xAll = $yAll[3]
write-host $xAll
Powercfg -S $xAll
$pScheme = POWERCFG /Q
foreach ($line in $pScheme)
{
$yy = $line -split "\s+"
$xx = $yy[5]+$yy[6]+$yy[7]+$yy[8]
$zz = $yy[4]
$xSubGroup = $yy[1]
If($xSubGroup -eq "SubGroup")
{
$xSubGuid = $yy[3]
}
If($xx -eq "(allowwaketimers)")
{
write-host Power Scheme Guid = $xAll
write-host Subgroup Guid = $xSubGuid
write-host WakeUp Guid = $zz
Write-host POWERCFG -setacvalueindex $x $xSubGuid $zz 1
Echo " "
break
}
}
POWERCFG -setacvalueindex $xAll $xSubGuid $zz 1
}
}
}
Powercfg -S $xOrg
Наслаждаться.
Похоже, что вы можете использовать WMI для изменения настроек.
http://www.daniweb.com/software-development/csharp/threads/272577
У Microsoft есть создатель кода WMI, который поможет вам:
https://www.microsoft.com/download/en/confirmation.aspx?displayLang=en&id=8572
Вы можете искать в "root\CIMV2\power" материал для управления питанием.
С https://adameyob.com/2015/02/how-to-enable-wake-timers/
powercfg /SETACINDEXVALUE SCHEME_BALANCED SUB_SLEEP RTCWake 1
powercfg /SETACINDEXVALUE SCHEME_MIN SUB_SLEEP RTCWake 1
powercfg /SETACINDEXVALUE SCHEME_MAX SUB_SLEEP RTCWake 1
Или с http://adameyob.com/2015/02/how-to-enable-wake-timers/
FOR /f “tokens=1,2,3,4” %%I IN (‘powercfg.exe /getactivescheme’) DO ( SET GUID=%%L )
powercfg /setacvalueindex %GUID% SUB_SLEEP RTCWAKE 1