我需要允許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