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 desktop (or equivalently in a Terminal server session), we must disable animations and double-buffering. You can check this with:
/// <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;
}
}
Now i need to find out if the user is running on battery power. If they are, i don't want to blow through their battery. i want to do things such as
- disable animations
- disable background spell-checking
- disable background printing
- turn off gradients
- use
graphics.SmoothingMode = SmoothingMode.HighSpeed;
- use
graphics.InterpolationMode = InterpolationMode.Low;
- use
graphics.CompositingQuality = CompositingQuality.HighSpeed;
- minimize hard drive access - to avoid spin up
- minimize network access - to save WiFi power
Is there a managed way to see if the machine is currently running on battery?
References
How do you convince developers to pay their "taxes"?
Taxes: Remote Desktop Connection and painting
GetSystemMetrics(SM_REMOTESESSION)
Update: The short answer is:
Boolean isRunningOnBattery =
(System.Windows.Forms.SystemInformation.PowerStatus.PowerLineStatus ==
PowerLineStatus.Offline);