c# - 允许唤醒定时器 Windows 7/Vista

标签 c# windows-7 .net-2.0 windows-vista wakeup

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

wake timers -> power options

我试过 Win32_PowerSetting,但它只适用于英文版的 Windows。

我需要使用 .NET 2.0

感谢回复!

最佳答案

我怀疑您可以使用对 powrprof.dll 和 WMI 的 API 调用来完成此操作,但我没有时间弄清楚该方法。

此设置似乎只是一个 bool 注册表项,它根据您当前的电源计划定位:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes\(Current Power Scheme GUID)\(Sleep Category GUID)\(Enable AC or DC Wake Timers GUID) = 0 or 1

与其直接操作注册表,更简洁的方法是使用 powercfg.exe 启用这些设置。

对于交流电源:

powercfg.exe -SETACVALUINDEX SCHEME_CURRENT SUB_SLEEP bd3b718a-0680-4d9d-8ab2-e1d2b4ac806d 1

对于电池:

powercfg.exe -SETDCVALUINDEX 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);
}

此引用是您的 friend :http://msdn.microsoft.com/en-us/library/aa373163%28v=vs.85%29.aspx

关于c# - 允许唤醒定时器 Windows 7/Vista,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8501109/

相关文章:

c# - AllowDrop 在 Silverlight 中不再适用于桌面文件

c# - Web API Controller 不适用于 ASP.NET Web 窗体中的 POST/PUT/DELETE

c# - 出现错误0xc0000005时强制关闭应用

windows-7 - window 7 : how to select all files of a certain type located in my desktop?

c# - 是否可以通过其他应用程序使用 TrueCrypt? (C#)

c# - 关闭 winform 应用程序时将对象设置为 null 通常是个好主意吗?

c# - 我们如何检查列表框中的任何项目是否在 ASP.NET 2.0 中被选中?

.net-2.0 - 添加 .NET 2.0 SP1 作为部署项目的先决条件

c# - 删除文件 - 跳过正在使用的文件

c# - 使用 double.Parse 如果 Null 值,则值替换为 0