2011-12-14 142 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 

享受。