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?
I believe you can check SystemInformation.PowerStatus to see if it’s on battery or not.
Edit: In addition to the above, there’s also a System.Windows.Forms.PowerStatus class. One of its methods is PowerLineStatus, which will equal PowerLineStatus.Online if it’s on AC Power.