2011-12-14 119 views
2

我需要允許WakeTimers(計算機從睡眠/休眠中喚醒)插入啓用時設置的所有電源計劃。允許喚醒計時器Windows 7/Vista

wake timers -> power options

我試圖Win32_PowerSetting但它僅適用於Windows的英文版本。

我需要使用.NET 2.0

感謝您的回覆!

回答

4

我懷疑你可以使用powrprof.dll和WMI的API調用來做到這一點,但是我沒有時間來解決這個問題。

此設置似乎僅僅是根據您當前的電源計劃設置一個布爾值註冊表項:

HKEY_LOCAL_MACHINE \系統\ CurrentControlSet \控制\電力\用戶\ PowerSchemes \(當前電源方案GUID) \(睡眠等級GUID)\(啓用的AC或DC喚醒定時器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

編輯:

這使我的系統喚醒定時器使用高性能的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

+0

感謝您的迴應。我會檢查它:) – sczdavos 2012-09-26 06:34:32

1

看來您可以使用WMI來更改設置。

http://www.daniweb.com/software-development/csharp/threads/272577

微軟有一個WMI代碼創建者,這將幫助你:

https://www.microsoft.com/download/en/confirmation.aspx?displayLang=en&id=8572

您將要在 「ROOT \ CIMV2 \功率」 來搜索電源管理的東西。

+1

但它只適用於Windows的英文版本。 我使用以下代碼 `ManagementObjectSearcher搜索= 新ManagementObjectSearcher( 「根\\ CIMV2 \\功率」, 「SELECT * FROM Win32_PowerSetting WHERE的ElementName = '允許喚醒定時器'」);` FXP捷克版本有: ElementName ='Povolitčasovačeproprobuzení' 和InstanceID選擇不起作用... – sczdavos 2011-12-14 21:16:38

1

我寫了這個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 

享受。