2

有効に接続されているすべての電源プランで、WakeTimers (スリープ/休止状態からのコンピューターのウェイクアップ) を許可する必要があります。

スリープ解除タイマー -> 電源オプション

Win32_PowerSetting を試しましたが、英語版の Windows でしか機能しません。

.NET 2.0 を使用する必要がある

回答ありがとうございます。

4

4 に答える 4

4

これは、powrprof.dll への API 呼び出しと WMI を使用して実行できると思いますが、その方法を理解する時間がありませんでした。

この設定は、現在の電源プランに従って配置されている単なるブール値のレジストリ キーのようです。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes\(Current Power Scheme GUID)\(Sleep Category GUID)\(Enable AC or DC Wake Timers GUID) = 0 または 1

レジストリを直接操作するよりも、powercfg.exe を使用してこれらの設定を有効にする方がクリーンな方法です。

AC 電源の場合:

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

編集:

これにより、高性能電源スキームを使用して AC 電源で実行しているときに、システムのウェイク タイマーが有効になります (純粋に概念実証として)。

[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

于 2012-09-26T06:26:13.517 に答える
2

この powershell スクリプトを作成して、現在のすべての電源スキームでウェイク タイマーを有効または無効にしました。最後から 2 行目の "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

楽しみ。

于 2015-02-04T02:08:57.800 に答える
1

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」の下で、電源管理に関するものを検索する必要があります。

于 2011-12-14T08:09:48.080 に答える