I get a bit irked when I see stuff that can be solved but people just complain about it. News.com, slashdot, zdnet ... list goes on and on about people jumping on the bandwagon. So you know what, I attempted to fix it.
Ok, here is my solution. I spent more time prepping this post than writing the application. Two source materials are a coding 4 fun post by Arian Kulp that handled the power management and a MSDN magazine article by Ron Fosner.
New version here
Download Source
Download Executable
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Microsoft.Win32;
namespace VistaLaptopBatterySaver
{
public partial class Form1 : Form
{
/*
* Copyright Clint Rutkas May 2007
*
*/
[DllImport("dwmapi.dll", PreserveSig = false)]
public static extern void DwmEnableComposition(bool bEnable);
[DllImport("dwmapi.dll", PreserveSig = false)]
public static extern bool DwmIsCompositionEnabled();
public Form1()
{
InitializeComponent();
enableToolStripMenuItem.Checked = DwmIsCompositionEnabled();
}
private void Form1_Load(object sender, EventArgs e)
{
SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(SystemEvents_PowerModeChanged);
UpdatePowerInfo();
}
private void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
{
UpdatePowerInfo();
}
private void UpdatePowerInfo()
{
if (enableToolStripMenuItem.Checked)
{
PowerStatus ps = SystemInformation.PowerStatus;
DwmEnableComposition((ps.PowerLineStatus == PowerLineStatus.Online));
}
}
private void enableToolStripMenuItem_CheckStateChanged(object sender, EventArgs e)
{
UpdatePowerInfo();
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
private static void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
AboutBox ab = new AboutBox();
ab.Show();
}
}
}