Windows 7 – Temporarily Change Energy Settings Without Changing Power Plan

energywindows 7

I'm not particularly fond of windows 7's energy management features.

I think it's really cumbersome as I seem to have to change the current plan to do anything. And sometimes I don't want to change the plan – sometimes I just want to instruct the computer to do everything it's doing, just not automatically sleep cause I'm downloading something.

But it seems every time I want to do this, I am made to go through a number of different screens and options and then I have to remember to reset it back afterwards.

Is there a way to just temporarily override the options within my plan, with options like Do Not Sleep button? Or "Instantly Turn Off Monitor" button or "Don't go to sleep when I turn off lid" button?

Best Answer

There's a free program called Insomnia that will keep a computer awake as long as it's running.

http://dlaa.me/blog/post/9901642


Since the link has already changed once, here is the important part of the program source taken from the link above so that it can be reproduced if the link ever goes down permanently.

public partial class Window1 : Window
{
    private uint m_previousExecutionState;

    public Window1()
    {
        InitializeComponent();

        // Set new state to prevent system sleep (note: still allows screen saver)
        m_previousExecutionState = NativeMethods.SetThreadExecutionState(
            NativeMethods.ES_CONTINUOUS | NativeMethods.ES_SYSTEM_REQUIRED);
        if (0 == m_previousExecutionState)
        {
            MessageBox.Show("Call to SetThreadExecutionState failed unexpectedly.",
                Title, MessageBoxButton.OK, MessageBoxImage.Error);
            // No way to recover; fail gracefully
            Close();
        }
    }

    protected override void OnClosed(System.EventArgs e)
    {
        base.OnClosed(e);

        // Restore previous state
        if (0 == NativeMethods.SetThreadExecutionState(m_previousExecutionState))
        {
            // No way to recover; already exiting
        }
    }

    private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
    {
        // Start an instance of the NavigateUri (in a browser window)
        Process.Start(((Hyperlink)sender).NavigateUri.ToString());
    }
}

internal static class NativeMethods
{
    // Import SetThreadExecutionState Win32 API and necessary flags
    [DllImport("kernel32.dll")]
    public static extern uint SetThreadExecutionState(uint esFlags);
    public const uint ES_CONTINUOUS = 0x80000000;
    public const uint ES_SYSTEM_REQUIRED = 0x00000001;
}