在 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 文档 - 电源管理以及该文档的特定小节Microsoft 文档 - WM_POWERBROADCAST消息。
另请参阅影响 Windows 如何确定应用程序是否处于活动状态以及是否应进入睡眠模式的SetThreadExecutionState() 函数。
另请参阅以下 Stack Overflow 帖子: