一个需要确保关闭时做处理的程序,应当禁止用户点击控制台窗口上面的关闭按钮,强制关闭程序,否则可能会产生严重的问题。
正确做法应为:控制台程序工作时禁止关闭按钮,控制台程序完全结束之前启用关闭按钮。(因为控制台可能在 PowerShell、CMD、VSConsole 之中被宿主化运行)
bool Win32Native::EnabledConsoleWindowClosedButton(bool enabled) noexcept
{
HWND consoleWnd = GetConsoleWindow();
if (NULL == consoleWnd)
{
return false;
}
HMENU systemMenu = GetSystemMenu(consoleWnd, FALSE);
if (NULL == systemMenu)
{
return false;
}
if (enabled)
{
return EnableMenuItem(systemMenu, SC_CLOSE, MF_BYCOMMAND | MF_ENABLED) != FALSE;
}
else
{
return EnableMenuItem(systemMenu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED) != FALSE;
}
}