您可以使用 Windows API、Registry 获取电源高级设置值,包括 Hibernate After 和 Sleep After, powercfg 和 WMI。
所有解决方案最重要的通用信息是一些 GUID 值:
-
活动计划的 GUID(您应该先找到它。)
-
睡眠子组的 GUID:
238c9fa8-0aad-41ed-83f4-97be242c8f20
-
休眠后的 GUID 设置:
9d7815a6-7ee4-497e-8888-515a05f02364
-
Sleep After 的 GUID 设置:
29f6c1db-86da-48c5-9fdb-f2b67b1f44da
你找到值后,通常是十六进制,并显示秒。
使用 Windows API
您可以使用PowerGetActiveScheme 函数获取活动电源计划,然后您可以使用PowerReadACValue 获取您需要的值。
为此,首先声明:
private static Guid GUID_SLEEP_SUBGROUP =
new Guid("238c9fa8-0aad-41ed-83f4-97be242c8f20");
private static Guid GUID_HIBERNATEIDLE =
new Guid("9d7815a6-7ee4-497e-8888-515a05f02364");
[DllImport("powrprof.dll")]
static extern uint PowerGetActiveScheme(
IntPtr UserRootPowerKey,
ref IntPtr ActivePolicyGuid);
[DllImport("powrprof.dll")]
static extern uint PowerReadACValue(
IntPtr RootPowerKey,
ref Guid SchemeGuid,
ref Guid SubGroupOfPowerSettingGuid,
ref Guid PowerSettingGuid,
ref int Type,
ref int Buffer,
ref uint BufferSize);
然后这样求值:
var activePolicyGuidPTR = IntPtr.Zero;
PowerGetActiveScheme(IntPtr.Zero, ref activePolicyGuidPTR);
var activePolicyGuid = Marshal.PtrToStructure<Guid>(activePolicyGuidPTR);
var type = 0;
var value = 0;
var valueSize = 4u;
PowerReadACValue(IntPtr.Zero, ref activePolicyGuid,
ref GUID_SLEEP_SUBGROUP, ref GUID_HIBERNATEIDLE,
ref type, ref value, ref valueSize);
MessageBox.Show($"Hibernate after {value} seconds.");
注意
您还可以在a blog post 中找到使用注册表或使用 WMI 的示例。