c# - sistemas - sistema de recomendacion tesis
C#.NET: ¿Cómo verificar si estamos funcionando con batería? (5)
Quiero ser un buen desarrollador ciudadano, pagar mis impuestos y deshabilitar cosas si estamos ejecutando Remote Desktop o corriendo con batería.
Si estamos ejecutando el escritorio remoto (o de manera equivalente en una sesión del servidor de Terminal Server), debemos deshabilitar las animaciones y el doble almacenamiento en el búfer. Puedes verificar esto con:
/// <summary>
/// Indicates if we''re running in a remote desktop session.
/// If we are, then you MUST disable animations and double buffering i.e. Pay your taxes!
///
/// </summary>
/// <returns></returns>
public static Boolean IsRemoteSession
{
//This is just a friendly wrapper around the built-in way
get
{
return System.Windows.Forms.SystemInformation.TerminalServerSession;
}
}
Ahora necesito averiguar si el usuario está funcionando con energía de la batería. Si lo son, no quiero pasar la batería. Quiero hacer cosas como
- desactivar animaciones
- deshabilitar la verificación ortográfica de fondo
- desactivar la impresión de fondo
- desactivar gradientes
- use
graphics.SmoothingMode = SmoothingMode.HighSpeed;
- use
graphics.InterpolationMode = InterpolationMode.Low;
- use
graphics.CompositingQuality = CompositingQuality.HighSpeed;
- minimizar el acceso al disco duro - para evitar girar
- minimizar el acceso a la red - para ahorrar energía WiFi
¿Hay alguna manera de controlar si la máquina funciona con batería?
Referencias
¿Cómo convencer a los desarrolladores para que paguen sus "impuestos"?
No creo que esté expuesto en el código administrado, pero puede usar Win32 GetSystemPowerStatus a través de pinvoke para obtener esta información.
Como comentario adicional, es posible que desee considerar el uso de GetCurrentPowerPolicies o similar para determinar las preferencias de los usuarios relacionadas con el rendimiento / administración de energía.
Puede usar WMI (Windows Management Instrumentation) para consultar el sistema operativo sobre el estado de la batería.
Puede encontrar más información aquí:
- http://69.10.233.10/KB/system/Wmi_Processor_infoWrapper.aspx
- http://www.microsoft.com/technet/scriptcenter/resources/qanda/apr07/hey0409.mspx
- http://www.codeproject.com/KB/cs/EverythingInWmi03.aspx
Espero que ayude.
Puede usar la función GetSystemPowerStatus usando P / Invoke. Ver: http://msdn.microsoft.com/en-gb/library/aa372693.aspx
Aquí hay un ejemplo:
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);
}
}
}
Creo que puede verificar SystemInformation.PowerStatus para ver si tiene batería o no.
Boolean isRunningOnBattery =
(System.Windows.Forms.SystemInformation.PowerStatus.PowerLineStatus ==
PowerLineStatus.Offline);
Editar: Además de lo anterior, también hay un System.Windows.Forms. Clase PowerStatus . Uno de sus métodos es PowerLineStatus , que será igual a PowerLineStatus.Online si está en corriente alterna.
R. Bemrose encontró la llamada administrada. Aquí hay un código de muestra:
/// <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);
}
}