我需要允许WakeTimers(计算机从睡眠/休眠中唤醒)插入启用时设置的所有电源计划。允许唤醒计时器Windows 7/Vista
我试图Win32_PowerSetting但它仅适用于Windows的英文版本。
我需要使用.NET 2.0
感谢您的回复!
我需要允许WakeTimers(计算机从睡眠/休眠中唤醒)插入启用时设置的所有电源计划。允许唤醒计时器Windows 7/Vista
我试图Win32_PowerSetting但它仅适用于Windows的英文版本。
我需要使用.NET 2.0
感谢您的回复!
我怀疑你可以使用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
看来您可以使用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 \功率” 来搜索电源管理的东西。
但它只适用于Windows的英文版本。 我使用以下代码 `ManagementObjectSearcher搜索= 新ManagementObjectSearcher( “根\\ CIMV2 \\功率”, “SELECT * FROM Win32_PowerSetting WHERE的ElementName = '允许唤醒定时器'”);` FXP捷克版本有: ElementName ='Povolitčasovačeproprobuzení' 和InstanceID选择不起作用... – sczdavos 2011-12-14 21:16:38
我写了这个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
享受。
从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
感谢您的回应。我会检查它:) – sczdavos 2012-09-26 06:34:32