.NET - настройка параметров питания из кода - PullRequest
3 голосов
/ 17 сентября 2011

Я хотел бы написать очень простой код из C # - простого двухкнопочного приложения, которое позволит мне изменить действие, которое выполняется при закрытой крышке. От «сна» к «бездействию» и наоборот.

Я обнаружил, что он каким-то образом подключен к WMI - но никакой реальной информации о том, как этого добиться, нет.

помощь будет высоко ценится.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 15 декабря 2016

Это действительно старый пост, но на удивление, ответ довольно сложно найти в другом месте.Здесь было мое решение для управления кнопкой питания.Надеюсь, это кому-нибудь поможет.Хотя эта статья и предназначена для других целей, она очень помогла:

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

Вот все необходимые операции импорта.Обратите внимание, что у вас есть значение постоянного и переменного тока в зависимости от того, работает планшет (в моем случае) от батареи или нет.

[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

Вот такДолжна быть включена некоторая защита от ошибок, но она прекрасно работает.

2 голосов
/ 17 сентября 2011

Взгляните на Windows API Code Pack , который является оболочкой для многих API Windows. Он включает API управления питанием .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...