Visual Studio C++ MFC アプリケーションでは、次の例のように、メッセージON_MESSAGE()
を探してメッセージ マップにを追加する必要があります。WM_POWERBROADCAST
BEGIN_MESSAGE_MAP(CFrameworkWndApp, CWinApp)
//{{AFX_MSG_MAP(CFrameworkWndApp)
ON_WM_CHAR()
ON_WM_TIMER()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_POWERBROADCAST, OnPowerMsgRcvd)
END_MESSAGE_MAP()
wParam
次に、このスケルトンのようにメッセージ タイプの変数を確認できるように、クラス定義の変更と共にメッセージ ハンドラー関数を追加して、メッセージ ハンドラーのメンバー関数を宣言する必要があります。LRESULT
メッセージを処理したかどうかを示す値を返すことを忘れないでください。
// Handle the WM_POWERBROADCAST message to process a message concerning power management
// such as going to Sleep or Waking Up.
LRESULT CFrameworkWndApp::OnPowerMsgRcvd(WPARAM wParam, LPARAM lParam)
{
LRESULT lrProcessed = 0; // indicate if message processed or not
switch (wParam) {
case PBT_APMPOWERSTATUSCHANGE:
TRACE0("PBT_APMPOWERSTATUSCHANGE received\n");
break;
case PBT_APMRESUMEAUTOMATIC:
TRACE0("PBT_APMRESUMEAUTOMATIC received\n");
break;
case PBT_APMRESUMESUSPEND:
TRACE0("PBT_APMRESUMESUSPEND received\n");
break;
case PBT_APMSUSPEND:
TRACE0("PBT_APMSUSPEND received\n");
break;
}
// indicate if framework needs to handle message or we did ourselves.
return lrProcessed;
}
メッセージの処理の詳細については、 Microsoft のドキュメント - Power Managementおよびそのドキュメントの特定のサブセクションMicrosoft のドキュメント - WM_POWERBROADCAST メッセージを参照してください。
Windows がアプリケーションがアクティブかどうか、およびスリープ モードに入る必要があるかどうかを判断する方法に影響を与えるSetThreadExecutionState() 関数も参照してください。
次のスタック オーバーフローの投稿も参照してください。