如何使用C++捕获窗口关闭/重新启动消息

How to capture windows shut down/ Restart message using C++

本文关键字:重新启动 消息 窗口 何使用 C++      更新时间:2023-10-16

如果用户关闭/重新启动/注销计算机,我想以编程方式检查我的应用程序。我尝试实现以下代码,但它给出了编译错误

error: invalid conversion from 'bool (*)(DWORD)' to 'BOOL (*)(DWORD)'
error: initializing argument 1 of 'BOOL SetConsoleCtrlHandler(BOOL (*)(DWORD), BOOL)'
void TestApp:: OnQuit()
{
    SetConsoleCtrlHandler(HandlerRoutine, TRUE);
}
//Windows Call Back function implementation
bool WINAPI HandlerRoutine(DWORD dwCtrlType)
{
   bool ret = false;    
   if (dwCtrlType == CTRL_LOGOFF_EVENT || dwCtrlType == CTRL_SHUTDOWN_EVENT)
      //Graceful Quit
   return ret;
}

我的开发环境是QT Creator QT SDK和C++。

正如其他人所说,BOOLint,而不是boolbool的标称值为truefalse10BOOL使用FALSE == 0TRUE == !FALSE。 这里大部分都无关紧要,因为它们基本上以相同的方式工作。

BOOL来自WinAPI的旧传统,当时C没有内置的bool类型。

因此,您真正需要做的就是在处理程序中将bool更改为BOOL

BOOL WINAPI HandlerRoutine(DWORD dwCtrlType)
^^^^
{
   BOOL ret = false;    
   ^^^^
   if (dwCtrlType == CTRL_LOGOFF_EVENT || dwCtrlType == CTRL_SHUTDOWN_EVENT)
      //Graceful Quit
   return ret;
}