C ++控制台应用程序阻止退出

时间:2018-10-30 18:48:32

标签: c++ windows

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

2 个答案:

答案 0 :(得分:0)

我从来没有使用过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上尝试过。

答案 1 :(得分:-1)

CTRL-C向您的程序发送SIGINT信号,可以捕获该信号。 了解更多here