我需要允许所有电源计划的WakeTimers (计算机从睡眠/休眠中唤醒)设置为已启用。

我试过Win32_PowerSetting,但它只适用于英文版的视窗系统。
我需要使用.NET 2.0
感谢您的回复!
发布于 2012-09-26 14:26:14
我怀疑您可以使用对powrprof.dll的API调用以及WMI来做到这一点,但我还没有时间弄清楚这种方法。
此设置看起来只是一个布尔注册表项,它根据您当前的电源计划定位:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes(Current电源方案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
发布于 2015-02-04 10:08:58
我编写这个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好好享受吧。
发布于 2011-12-14 16:09:48
看起来您可以使用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://stackoverflow.com/questions/8501109
复制相似问题