Разрешить таймеры пробуждения Windows 7 / Vista - PullRequest
2 голосов
/ 14 декабря 2011

Мне нужно разрешить WakeTimers (компьютер просыпается из режима сна / гибернации) для всех планов электропитания, установленных на подключенном к Включено.

image power options">

Я пробовал Win32_PowerSetting, но он работаетна английской версии Windows.

Мне нужно использовать .NET 2.0

Спасибо за ответы!

Ответы [ 4 ]

4 голосов
/ 26 сентября 2012

Я подозреваю, что вы можете сделать это, используя вызовы 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

1 голос
/ 04 февраля 2015

Я написал этот сценарий 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

Наслаждайтесь.

1 голос
/ 14 декабря 2011

Похоже, что вы можете использовать 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» для управления питанием.

0 голосов
/ 25 апреля 2017

С https://adameyob.com/2015/02/how-to-enable-wake-timers/#comment-17

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/#comment-31

FOR /f “tokens=1,2,3,4” %%I IN (‘powercfg.exe /getactivescheme’) DO ( SET GUID=%%L )
powercfg /setacvalueindex %GUID% SUB_SLEEP RTCWAKE 1
...