C# .NET-从代码中设置电源选项

C# .NET-从代码中设置电源选项,c#,.net,windows,winforms,wmi,C#,.net,Windows,Winforms,Wmi,我想从C#中编写非常简单的代码,C#是一个简单的2按钮应用程序,它允许我更改盖子关闭时所采取的操作。 从“睡眠”到“不行动”,反之亦然 我发现它以某种方式连接到WMI,但没有关于如何实现这一点的实际信息 非常感谢您的帮助 谢谢 看看,它是许多Windows API的包装器。它包括。这是一篇非常古老的帖子,但令人惊讶的是,在别处很难找到答案。这是我控制电源按钮的解决方案。希望它能帮助别人。尽管这篇文章有不同的目的,但它极大地帮助了我们: 这是所有必需的进口商品。请注意,您有一个DC和AC值索引,

我想从C#中编写非常简单的代码,C#是一个简单的2按钮应用程序,它允许我更改盖子关闭时所采取的操作。 从“睡眠”到“不行动”,反之亦然

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

非常感谢您的帮助


谢谢

看看,它是许多Windows API的包装器。它包括。

这是一篇非常古老的帖子,但令人惊讶的是,在别处很难找到答案。这是我控制电源按钮的解决方案。希望它能帮助别人。尽管这篇文章有不同的目的,但它极大地帮助了我们:

这是所有必需的进口商品。请注意,您有一个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.
这里定义了索引

就这样。应该加入一些错误保护,但效果很好