首页 > 解决方案 > C++ 控制台应用程序阻止退出

问题描述

许多应用程序通过显示带有 YES(应用程序退出)和 NO(应用程序继续运行)的消息框来询问用户是否真的要关闭应用程序。这对于控制台应用程序(在 x 图标单击或 CTRL+C 上)也可能吗?

标签: c++windows

解决方案


我从来没有让 ctrl-c 处理程序来处理这个,但它可能在你的系统上工作。这将捕获 ctrl-break、X 或 alt-F4。在您的程序中,调用 SetConsoleCtrlHandler

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
int main()
{
    SetConsoleCtrlHandler(exit_handler, TRUE);
    ...
}

退出处理程序定义为

BOOL WINAPI exit_handler(DWORD dwCtrlType)
{
    switch (dwCtrlType)
    {
    case CTRL_C_EVENT:
        // Never gotten this to work - use another method
        return MessageBox(NULL, "Mr Ctrl C", "Do you wish to exit", MB_YESNO) == IDNO;
    case CTRL_BREAK_EVENT:
        return MessageBox(NULL, "Mr Ctrl Break", "Do you wish to exit", MB_YESNO) == IDNO;
    case CTRL_CLOSE_EVENT:
        return MessageBox(NULL, "Mr X or Mr Alt-F4", "Do you wish to exit", MB_YESNO) == IDNO;

    default:
        return FALSE;
    }
    // Never gets here
    return TRUE;
}

TRUE 表示您已处理该命令,FALSE 表示您尚未处理。如果您想退出,请返回 FALSE。

编辑这适用于 XP 和 W7。我还没有在 W10 或 W8 上尝试过。


推荐阅读