2011-09-17 5 views
3

뚜껑을 닫을 때 취할 동작을 변경할 수있는 간단한 2 버튼 응용 프로그램 인 C#에서 아주 간단한 코드를 작성하고 싶습니다. "sleep"에서 "no action"으로, 그 반대의 경우도 마찬가지입니다..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 "); 

그리고 당신이 그것을 설정하는 방법입니다 : 인덱스가 여기 있어요 https://msdn.microsoft.com/en-us/library/windows/hardware/mt608287(v=vs.85).aspx

정의

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. 

. 일부 오류 보호 기능을 통합해야하지만 훌륭하게 작동합니다.