Esempio n. 1
0
    /// <summary>
    /// Get system power setting for indicated power status (Vista / Windows 7)
    /// </summary>
    /// <param name="settingType"></param>
    /// <returns>Returns value of power setting requested. Returns -1 on errors.</returns>
    private static int GetSystemPowerSetting(SystemPowerSettingType settingType, bool AC)
    {
      try
      {
        IntPtr ptr = IntPtr.Zero;
        Guid scheme;
        UInt32 value = 0;
        UInt32 success;

        PowerGetActiveScheme(IntPtr.Zero, ref ptr);
        scheme = (Guid)Marshal.PtrToStructure(ptr, typeof(Guid));
        SystemPowerSetting ps = SystemPowerSettings[(int)settingType];
        if (AC)
          success = PowerReadACValueIndex(IntPtr.Zero, ref scheme, ref ps.subgroupGuid, ref ps.settingGuid, ref value);
        else
          success = PowerReadDCValueIndex(IntPtr.Zero, ref scheme, ref ps.subgroupGuid, ref ps.settingGuid, ref value);
        if (success == 0)
          return (int)value;
        return -1;
      }
      catch (Exception)
      {
        return -1;
      }
    }
Esempio n. 2
0
    /// <summary>
    /// Set system power setting value for indicated power status
    /// </summary>
    /// <param name="settingType"></param>
    /// <param name="AC"></param>
    /// <param name="value"></param>
    private static void SetSystemPowerSetting(SystemPowerSettingType settingType, bool AC, uint value)
    {
      try
      {
        IntPtr ptr = IntPtr.Zero;
        PowerGetActiveScheme(IntPtr.Zero, ref ptr);
        Guid scheme = (Guid)Marshal.PtrToStructure(ptr, typeof(Guid));

        SystemPowerSetting ps = SystemPowerSettings[(int)settingType];
        if (AC)
          PowerWriteACValueIndex(IntPtr.Zero, ref scheme, ref ps.subgroupGuid, ref ps.settingGuid, value);
        else
          PowerWriteDCValueIndex(IntPtr.Zero, ref scheme, ref ps.subgroupGuid, ref ps.settingGuid, value);
      }
      catch (Exception) { }
    }
Esempio n. 3
0
 /// <summary>
 /// Set power setting value (OS independent)
 /// </summary>
 /// <param name="settingType"></param>
 /// <param name="AC"></param>
 /// <param name="value"></param>
 public static void SetPowerSetting(SystemPowerSettingType settingType, bool AC, uint value)
 {
   if (Environment.OSVersion.Version.Major >= 6)
     SetSystemPowerSetting(settingType, AC, value);
   else
     SetPowerPolicySetting(settingType, AC, value);
 }
Esempio n. 4
0
 /// <summary>
 /// Get power setting value for indicated power status (OS independent)
 /// </summary>
 /// <param name="settingType"></param>
 /// <param name="AC"></param>
 /// <returns>Returns value of power setting requested. Returns 0 on errors.</returns>
 public static int GetPowerSetting(SystemPowerSettingType settingType, bool AC)
 {
   if (Environment.OSVersion.Version.Major >= 6)
     return GetSystemPowerSetting(settingType, AC);
   else
     return GetPowerPolicySetting(settingType, AC);
 }
Esempio n. 5
0
 /// <summary>
 /// Get power setting value for active power status (OS independent)
 /// </summary>
 /// <param name="settingType"></param>
 /// <returns>Returns value of power setting requested. Returns 0 on errors.</returns>
 public static int GetActivePowerSetting(SystemPowerSettingType settingType)
 {
   if (Environment.OSVersion.Version.Major >= 6)
     return GetSystemPowerSetting(settingType, ACPowerPluggedIn);
   else
     return GetPowerPolicySetting(settingType, ACPowerPluggedIn);
 }
Esempio n. 6
0
    /// <summary>
    /// Set power policy setting value for indicated power status (Windows XP)
    /// </summary>
    /// <param name="settingType"></param>
    /// <param name="AC"></param>
    /// <param name="value"></param>
    private static void SetPowerPolicySetting(SystemPowerSettingType settingType, bool AC, uint value)
    {
      try
      {
        GLOBAL_POWER_POLICY gpp = new GLOBAL_POWER_POLICY();
        POWER_POLICY pp = new POWER_POLICY();
        UInt32 index = 0;
        POWER_ACTION action;
        PowerActionEventCode eventCode;

        if (!GetCurrentPowerPolicies(ref gpp, ref pp))
          return;

        GetActivePwrScheme(ref index);

        switch (settingType)
        {
          case SystemPowerSettingType.STANDBYIDLE:
            if (AC)
            {
              pp.user.IdleTimeoutAc = value;
              if (value == 0 && pp.mach.DozeS4TimeoutAc != 0)
                pp.user.IdleAc.Action = POWER_ACTION.PowerActionHibernate;
              else
                pp.user.IdleAc.Action = POWER_ACTION.PowerActionSleep;
            }
            else
            {
              pp.user.IdleTimeoutDc = value;
              if (value == 0 && pp.mach.DozeS4TimeoutDc != 0)
                pp.user.IdleDc.Action = POWER_ACTION.PowerActionHibernate;
              else
                pp.user.IdleDc.Action = POWER_ACTION.PowerActionSleep;
            }
            break;

          case SystemPowerSettingType.HIBERNATE_AFTER:
            if (AC)
            {
              if (pp.user.IdleTimeoutAc == 0)
              {
                pp.user.IdleTimeoutAc = value;
                pp.mach.DozeS4TimeoutAc = 0;
                pp.user.IdleAc.Action = POWER_ACTION.PowerActionHibernate;
              }
              else
              {
                if (value > pp.user.IdleTimeoutAc)
                  pp.mach.DozeS4TimeoutAc = value - pp.user.IdleTimeoutAc;
                else
                  pp.mach.DozeS4TimeoutAc = value;
                pp.user.IdleAc.Action = POWER_ACTION.PowerActionSleep;
              }
            }
            else
            {
              if (pp.user.IdleTimeoutDc == 0)
              {
                pp.user.IdleTimeoutDc = value;
                pp.mach.DozeS4TimeoutDc = 0;
                pp.user.IdleDc.Action = POWER_ACTION.PowerActionHibernate;
              }
              else
              {
                if (value > pp.user.IdleTimeoutDc)
                  pp.mach.DozeS4TimeoutDc = value - pp.user.IdleTimeoutDc;
                else
                  pp.mach.DozeS4TimeoutDc = value;
                pp.user.IdleDc.Action = POWER_ACTION.PowerActionSleep;
              }
            }
            break;

          case SystemPowerSettingType.LID_CLOSE_ACTION:
            eventCode = 0;
            switch (value)
            {
              case 0: // Do nothing
                action = POWER_ACTION.PowerActionNone;
                eventCode = PowerActionEventCode.POWER_FORCE_TRIGGER_RESET;
                break;
              case 1: // Sleep
                action = POWER_ACTION.PowerActionSleep;
                break;
              case 2: // Hibernate
                action = POWER_ACTION.PowerActionHibernate;
                break;
              case 3: // Shutdown
                action = POWER_ACTION.PowerActionNone;
                eventCode = PowerActionEventCode.POWER_USER_NOTIFY_SHUTDOWN;
                break;
              case 4: // Ask User
                action = POWER_ACTION.PowerActionNone;
                eventCode = PowerActionEventCode.POWER_USER_NOTIFY_BUTTON;
                break;
              default:
                return;
            }
            if (AC)
            {
                gpp.user.LidCloseAc.Action = action;
                gpp.user.LidCloseAc.EventCode = eventCode;
            }
            else
            {
              gpp.user.LidCloseDc.Action = action;
              gpp.user.LidCloseDc.EventCode = eventCode;
            }
            break;

          case SystemPowerSettingType.POWER_BUTTON_ACTION:
            eventCode = 0;
            switch (value)
            {
              case 0: // Do nothing
                action = POWER_ACTION.PowerActionNone;
                eventCode = PowerActionEventCode.POWER_FORCE_TRIGGER_RESET;
                break;
              case 1: // Sleep
                action = POWER_ACTION.PowerActionSleep;
                break;
              case 2: // Hibernate
                action = POWER_ACTION.PowerActionHibernate;
                break;
              case 3: // Shutdown
                action = POWER_ACTION.PowerActionNone;
                eventCode = PowerActionEventCode.POWER_USER_NOTIFY_SHUTDOWN;
                break;
              case 4: // Ask User
                action = POWER_ACTION.PowerActionNone;
                eventCode = PowerActionEventCode.POWER_USER_NOTIFY_BUTTON;
                break;
              default:
                return;
            }
            if (AC)
            {
                gpp.user.PowerButtonAc.Action = action;
                gpp.user.PowerButtonAc.EventCode = eventCode;
            }
            else
            {
              gpp.user.PowerButtonDc.Action = action;
              gpp.user.PowerButtonDc.EventCode = eventCode;
            }
            break;

          case SystemPowerSettingType.SLEEP_BUTTON_ACTION:
            eventCode = 0;
            switch (value)
            {
              case 0: // Do nothing
                action = POWER_ACTION.PowerActionNone;
                eventCode = PowerActionEventCode.POWER_FORCE_TRIGGER_RESET;
                break;
              case 1: // Sleep
                action = POWER_ACTION.PowerActionSleep;
                break;
              case 2: // Hibernate
                action = POWER_ACTION.PowerActionHibernate;
                break;
              case 3: // Shutdown
                action = POWER_ACTION.PowerActionNone;
                eventCode = PowerActionEventCode.POWER_USER_NOTIFY_SHUTDOWN;
                break;
              case 4: // Ask User
                action = POWER_ACTION.PowerActionNone;
                eventCode = PowerActionEventCode.POWER_USER_NOTIFY_BUTTON;
                break;
              default:
                return;
            }
            if (AC)
            {
              gpp.user.SleepButtonAc.Action = action;
              gpp.user.SleepButtonAc.EventCode = eventCode;
            }
            else
            {
              gpp.user.SleepButtonDc.Action = action;
              gpp.user.SleepButtonDc.EventCode = eventCode;
            }
            break;

          default:
            return;
        }
        SetActivePwrScheme(index, ref gpp, ref pp);
      }
      catch (Exception) { }
    }
Esempio n. 7
0
    /// <summary>
    /// Get power policy setting for indicated power status (Windows XP)
    /// </summary>
    /// <param name="settingType">Returns value of power setting requested. Returns -1 on errors.</param>
    /// <returns></returns>
    private static int GetPowerPolicySetting(SystemPowerSettingType settingType, bool AC)
    {
      try
      {
        GLOBAL_POWER_POLICY gpp = new GLOBAL_POWER_POLICY();
        POWER_POLICY pp = new POWER_POLICY();
        POWER_ACTION action;
        PowerActionEventCode eventCode;

        if (!GetCurrentPowerPolicies(ref gpp, ref pp))
        {
          return -1;
        }

        switch (settingType)
        {
          case SystemPowerSettingType.STANDBYIDLE:
            if (AC)
            {
              if (pp.user.IdleAc.Action == POWER_ACTION.PowerActionSleep)
                return (int)pp.user.IdleTimeoutAc;
            }
            else
            {
              if (pp.user.IdleDc.Action == POWER_ACTION.PowerActionSleep)
                return (int)pp.user.IdleTimeoutDc;
            }
            return 0;

          case SystemPowerSettingType.HIBERNATE_AFTER:
            if (AC)
            {
              if (pp.user.IdleAc.Action == POWER_ACTION.PowerActionHibernate)
                return (int)pp.user.IdleTimeoutAc;
              if (pp.mach.DozeS4TimeoutAc != 0)
                return (int)(pp.mach.DozeS4TimeoutAc + pp.user.IdleTimeoutAc);
            }
            else
            {
              if (pp.user.IdleDc.Action == POWER_ACTION.PowerActionHibernate)
                return (int)pp.user.IdleTimeoutDc;
              if (pp.mach.DozeS4TimeoutDc != 0)
                return (int)(pp.mach.DozeS4TimeoutDc + pp.user.IdleTimeoutDc);
            }
            return 0;

          case SystemPowerSettingType.LID_CLOSE_ACTION:
            if (AC)
            {
              action = gpp.user.LidCloseAc.Action;
              eventCode = gpp.user.LidCloseAc.EventCode;
            }
            else
            {
              action = gpp.user.LidCloseDc.Action;
              eventCode = gpp.user.LidCloseDc.EventCode;
            }
            switch (action)
            {
              case POWER_ACTION.PowerActionSleep:
                return 1; // Sleep
              case POWER_ACTION.PowerActionHibernate:
                return 2; // Hibernate
              default:
                if ((eventCode & PowerActionEventCode.POWER_USER_NOTIFY_SHUTDOWN) != 0)
                  return 3; // Shutdown
                if ((eventCode & PowerActionEventCode.POWER_USER_NOTIFY_BUTTON) != 0)
                  return 4; // Ask User
                return 0; //Do nothing
            }

          case SystemPowerSettingType.POWER_BUTTON_ACTION:
            if (AC)
            {
              action = gpp.user.PowerButtonAc.Action;
              eventCode = gpp.user.PowerButtonAc.EventCode;
            }
            else
            {
              action = gpp.user.PowerButtonDc.Action;
              eventCode = gpp.user.PowerButtonDc.EventCode;
            }
            switch (action)
            {
              case POWER_ACTION.PowerActionSleep:
                return 1; // Sleep
              case POWER_ACTION.PowerActionHibernate:
                return 2; // Hibernate
              default:
                if ((eventCode & PowerActionEventCode.POWER_USER_NOTIFY_SHUTDOWN) != 0)
                  return 3; // Shutdown
                if ((eventCode & PowerActionEventCode.POWER_USER_NOTIFY_BUTTON) != 0)
                  return 4; // Ask User
                return 0; //Do nothing
            }

          case SystemPowerSettingType.SLEEP_BUTTON_ACTION:
            if (AC)
            {
              action = gpp.user.SleepButtonAc.Action;
              eventCode = gpp.user.SleepButtonAc.EventCode;
            }
            else
            {
              action = gpp.user.SleepButtonDc.Action;
              eventCode = gpp.user.SleepButtonDc.EventCode;
            }
            switch (action)
            {
              case POWER_ACTION.PowerActionSleep:
                return 1; // Sleep
              case POWER_ACTION.PowerActionHibernate:
                return 2; // Hibernate
              default:
                if ((eventCode & PowerActionEventCode.POWER_USER_NOTIFY_SHUTDOWN) != 0)
                  return 3; // Shutdown
                if ((eventCode & PowerActionEventCode.POWER_USER_NOTIFY_BUTTON) != 0)
                  return 4; // Ask User
                return 0; //Do nothing
            }

          default:
            return 0;
        }
      }
      catch (Exception)
      {
        return -1;
      }
    }