2011-09-17 30 views
3
設置電源選項

我想從C#編寫非常簡單的代碼 - 一個簡單的2按鈕應用程序,它允許我更改蓋子關閉時的動作。 從「睡眠」到「無動作」,反之亦然。.NET - 從代碼

我發現它以某種方式連接到WMI - 但沒有關於如何實現這一點的實際信息。

幫助將不勝感激。

謝謝!

回答

2

這是一個非常舊的帖子,但令人驚訝的是,答案在其他地方很難找到。這是我的解決方案來控制電源按鈕。希望它可以幫助某人。雖然服務於不同的目的,這篇文章幫助極大:

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

就是這樣定義。應該加入一些錯誤保護措施,但效果很好。