C#.NET: Как проверить, работаем ли мы от батареи?

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

27
задан Ian Boyd 24 February 2019 в 00:19
поделиться

5 ответов

Я полагаю, что можно проверить SystemInformation. PowerStatus, чтобы видеть, находится ли это на батарее или нет.

Boolean isRunningOnBattery =
      (System.Windows.Forms.SystemInformation.PowerStatus.PowerLineStatus == 
       PowerLineStatus.Offline);

Редактирование: В дополнение к вышеупомянутому существует также Система. Windows. Формы. класс PowerStatus . Один из его методов PowerLineStatus, который будет равняться PowerLineStatus. Онлайн, если это находится на питании переменным током.

32
ответ дан Ian Boyd 28 November 2019 в 05:16
поделиться

R. Bemrose нашел управляемый вызов. Вот некоторый пример кода:

/// <summary>
/// Indicates if we're running on battery power.
/// If we are, then disable CPU wasting things like animations, background operations, network, I/O, etc
/// </summary>
public static Boolean IsRunningOnBattery
{
   get
   {
      PowerLineStatus pls = System.Windows.Forms.SystemInformation.PowerStatus.PowerLineStatus;

      //Offline means running on battery
      return (pls == PowerLineStatus.Offline);
   }
}
8
ответ дан Erick Robertson 28 November 2019 в 05:16
поделиться

Вы могли использовать функцию GetSystemPowerStatus, использующую P/Invoke. См.: http://msdn.microsoft.com/en-gb/library/aa372693.aspx

Вот пример:

using System;
using System.Runtime.InteropServices;
namespace PowerStateExample
{
    [StructLayout(LayoutKind.Sequential)]
    public class PowerState
    {
        public ACLineStatus ACLineStatus;
        public BatteryFlag BatteryFlag;
        public Byte BatteryLifePercent;
        public Byte Reserved1;
        public Int32 BatteryLifeTime;
        public Int32 BatteryFullLifeTime;

        // direct instantation not intended, use GetPowerState.
        private PowerState() {}

        public static PowerState GetPowerState()
        {
            PowerState state = new PowerState();
            if (GetSystemPowerStatusRef(state))
                return state;

            throw new ApplicationException("Unable to get power state");
        }

        [DllImport("Kernel32", EntryPoint = "GetSystemPowerStatus")]
        private static extern bool GetSystemPowerStatusRef(PowerState sps);
    }

    // Note: Underlying type of byte to match Win32 header
    public enum ACLineStatus : byte
    {
        Offline = 0, Online = 1, Unknown = 255
    }

    public enum BatteryFlag : byte
    {
        High = 1, Low = 2, Critical = 4, Charging = 8,
        NoSystemBattery = 128, Unknown = 255
    }

    // Program class with main entry point to display an example.
    class Program
    {        
        static void Main(string[] args)
        {
            PowerState state = PowerState.GetPowerState();
            Console.WriteLine("AC Line: {0}", state.ACLineStatus);
            Console.WriteLine("Battery: {0}", state.BatteryFlag);
            Console.WriteLine("Battery life %: {0}", state.BatteryLifePercent);
        }
    }
}
7
ответ дан driis 28 November 2019 в 05:16
поделиться

Вы могли использовать WMI (инструментарий управления Windows) для запросов операционной системы о состоянии батареи.

Вы могли найти больше информации здесь:

Hope, которая помогает.

0
ответ дан Igal Tabachnik 28 November 2019 в 05:16
поделиться

Я не полагаю, что это представлено в управляемом коде, но можно использовать Win32 GetSystemPowerStatus через pinvoke для получения этой информации

Как в стороне, можно хотеть рассмотреть использование GetCurrentPowerPolicies или подобный для определения пользовательских предпочтений, касающихся производительности/управления питанием.

-1
ответ дан Andrew Grant 28 November 2019 в 05:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: