0
我正在用C++寫一個控制檯應用程序。如何處理控制檯應用程序中的shutdown logoff?
我使用SetConsoleCtrlHandler來關閉任何應用程序(CTRL + C,關閉控制檯,Windows關機或註銷)。
#include <windows.h>
#include <stdio.h>
BOOL CtrlHandler(DWORD fdwCtrlType)
{
switch(fdwCtrlType)
{
// Handle the CTRL-C signal.
case CTRL_C_EVENT:
printf("Ctrl-C event\n\n");
Beep(750, 300);
return(TRUE);
// CTRL-CLOSE: confirm that the user wants to exit.
case CTRL_CLOSE_EVENT:
Beep(600, 200);
printf("Ctrl-Close event\n\n");
return(TRUE);
// Pass other signals to the next handler.
case CTRL_BREAK_EVENT:
Beep(900, 200);
printf("Ctrl-Break event\n\n");
return FALSE;
case CTRL_LOGOFF_EVENT:
Beep(1000, 200);
printf("Ctrl-Logoff event\n\n");
return FALSE;
case CTRL_SHUTDOWN_EVENT:
Beep(750, 500);
printf("Ctrl-Shutdown event\n\n");
return FALSE;
default:
return FALSE;
}
}
int main(void)
{
//MessageBoxA(0, "test", "test", 0); // ****************
if(SetConsoleCtrlHandler((PHANDLER_ROUTINE) CtrlHandler, TRUE))
{
printf("\nThe Control Handler is installed.\n");
printf("\n -- Now try pressing Ctrl+C or Ctrl+Break, or");
printf("\n try logging off or closing the console...\n");
printf("\n(...waiting in a loop for events...)\n\n");
while(1){ }
}
else
{
printf("\nERROR: Could not set control handler");
return 1;
}
return 0;
}
這是msdn的例子,它工作正常,直到我取消註釋標記行。當我這樣做時,我的應用程序處理CTRL + C,CTRL + Break和控制檯關閉,但在關閉或註銷時,它只是關閉而沒有任何反應。
Windows 7中,10 MSVC Express Edition的
這不僅發生後MessageBoxA,但也OemToCharBuffA或升壓:: ASIO – enji
幾個電話我除了線程創建不可見的窗口和處理WM_ENDSESSION它messageproc – enji
這是否解決了問題嗎? – rogerdpack