C# .NET: How to check if we're running on battery?

后端 未结 6 1887
既然无缘
既然无缘 2020-12-08 00:41

i want to be a good developer citizen, pay my taxes, and disable things if we\'re running over Remote Desktop, or running on battery.

If we\'re running over remote d

6条回答
  •  -上瘾入骨i
    2020-12-08 01:32

    You could use the GetSystemPowerStatus function using P/Invoke. See: http://msdn.microsoft.com/en-gb/library/aa372693.aspx

    Here's an example:

    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);
            }
        }
    }
    

提交回复
热议问题