省電力機能を抑止する(Windwows Vista/7)

アプリケーションによっては、そのアプリケーションが起動している間は、スタンバイや休止状態などの省電力機能を無効にしたいことがあります。 しかし、アプリケーションを使用するたびに「電源のプロパティ」の設定を変更するのは、現実的ではありません。

パソコンが省電力状態に移行しようとする時に、各アプリケーションにWINDOWSメッセージ「WM_POWERBROADCAST」が送られます。このメッセージのWPARAMの値が「PBT_APMQUERYSUSPEND」の時に、「BROADCAST_QUERY_DENY」を返すことで省電力機能を抑止することができます。

XPまでは、上記の方法で省電力機能を抑止することができましたが、Vista以降では利用できません。WPARAM値「PBT_APMQUERYSUSPEND」を持ったメッセージが来ないので、拒否することができません。

Vista以降では、「SetThreadExecutionState」関数を利用することで、対応できます。

// MainFrame.cpp

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    // ....

    // 省電力機能の抑止開始
    SetThreadExecutionState(ES_SYSTEM_REQUIRED | ES_CONTINUOUS);

    return 0;
}

void CMainFrame::OnDestroy()
{
    // 省電力機能の抑止終了
    SetThreadExecutionState(ES_CONTINUOUS);

    CFrameWnd::OnDestroy();
}