我想从C#编写非常简单的代码 - 一个简单的2按钮应用程序,它允许我更改盖子关闭时采取的操作。 从“睡眠”到“不动作”,反之亦然。
我发现它以某种方式连接到WMI - 但没有关于如何实现这一点的实际信息。
帮助将非常感激。
谢谢!
答案 0 :(得分:3)
这是一个非常古老的帖子,但令人惊讶的是,答案在其他地方很难找到。这是我控制电源按钮的解决方案。希望它可以帮助某人。虽然服务于不同的目的,但本文帮助极大:
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
就是这样。应该包含一些错误保护,但它很有效。
答案 1 :(得分:2)
查看Windows API Code Pack,它是许多Windows API的包装器。它包括Power Management API。