.NET – 从代码中设置电源选项

我想从C#编写非常简单的代码 – 一个简单的2button的应用程序,将允许我改变当盖子closures时采取的行动。 从“睡眠”到“不行动”,反之亦然。

我发现它以某种方式连接到WMI – 但没有实际的信息如何实现这一点。

帮助将不胜感激。

谢谢!

Solutions Collecting From Web of ".NET – 从代码中设置电源选项"

看一看Windows API代码包 ,这是许多Windows API的包装。 它包括电源管理API 。

这是一个非常古老的帖子,但令人惊讶的是,答案在其他地方很难找到。 这是我的解决方案来控制电源按钮。 希望它可以帮助别人。 虽然服务于不同的目的,但这篇文章非常有帮助:

https://www.codeproject.com/Tips/490390/How-to-disable-the-Sleep-button-while-your-code-is

这里是所有需要的进口。 请注意,根据平板电脑(在我的情况下)是否使用电池运行,您有一个DC和AC值索引。

[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)] static extern UInt32 PowerWriteDCValueIndex(IntPtr RootPowerKey, [MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid, [MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid, [MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid, int AcValueIndex); [DllImport("PowrProf.dll", CharSet = CharSet.Unicode)] static extern UInt32 PowerWriteACValueIndex(IntPtr RootPowerKey, [MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid, [MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid, [MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid, int AcValueIndex); [DllImport("PowrProf.dll", CharSet = CharSet.Unicode)] static extern UInt32 PowerSetActiveScheme(IntPtr RootPowerKey, [MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid); [DllImport("PowrProf.dll", CharSet = CharSet.Unicode)] static extern UInt32 PowerGetActiveScheme(IntPtr UserPowerKey, out IntPtr ActivePolicyGuid); static readonly Guid GUID_SYSTEM_BUTTON_SUBGROUP = new Guid("4f971e89-eebd-4455-a8de-9e59040e7347"); static readonly Guid GUID_POWERBUTTON = new Guid("7648efa3-dd9c-4e3e-b566-50f929386280"); static readonly Guid GUID_SLEEPBUTTON = new Guid("96996bc0-ad50-47ec-923b-6f41874dd9eb "); 

这里是你如何设置它:

 IntPtr pActiveSchemeGuid; var hr = PowerGetActiveScheme(IntPtr.Zero, out pActiveSchemeGuid); Guid activeSchemeGuid = (Guid)Marshal.PtrToStructure(pActiveSchemeGuid, typeof(Guid)); hr = PowerWriteDCValueIndex( IntPtr.Zero, activeSchemeGuid, GUID_SYSTEM_BUTTON_SUBGROUP, GUID_POWERBUTTON, 0); PowerSetActiveScheme(IntPtr.Zero, activeSchemeGuid); //This is necessary to apply the current scheme. 

在这里定义索引https://msdn.microsoft.com/en-us/library/windows/hardware/mt608287(v=vs.85).aspx

而已。 应该加入一些防错措施,但是效果很好。