Запретить закрытие приложения при закрытии консоли - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть приложение WinAPI / Win32, которое также открывает окно консоли (с целью отладки) до открытия главного окна).Я добавил безопасную проверку того, когда в главном окне нажимается кнопка X, он спрашивает: «Вы уверены?»вещь.Однако, если я нажимаю X на консоли, приложение сразу убивает, ничего не спрашивая.Есть ли способ предотвратить это?Вот фрагмент моего кода:

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR args, int nCmdShow)
{
EnableDebug();
WNDCLASSA MainWindow = { 0 };
MainWindow.hbrBackground = (HBRUSH) COLOR_WINDOW;
MainWindow.hCursor = LoadCursor(NULL, IDC_ARROW);
MainWindow.hInstance = hInst;
MainWindow.lpszClassName = "WindowClass";
MainWindow.lpfnWndProc = WndProc;
ATOM result = RegisterClassA(&MainWindow);
if (!result)
{
    MessageBoxA(NULL, "Failed to register window class", "Error", MB_OK);
    return -1;
}
MSG msg = { 0 };
//here the app goes on


 //here is the start of the debug function
    void EnableDebug(){
    if (AllocConsole() == 0)
    {
        MessageBoxA(NULL, "Unable to create a debug window!", "Error", MB_OK);
        return;
    }
    freopen("CONOUT$", "w", stderr);
    SetConsoleTitleA("Debug Window");
    clog.clear();

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Вы можете отключить кнопку закрытия в окне консоли, чтобы предотвратить случайное завершение работы вашего приложения:

if( HWND hwnd = GetConsoleWindow() )
{
    if( HMENU hMenu = GetSystemMenu( hwnd, FALSE ) )
    {
        EnableMenuItem( hMenu, SC_CLOSE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED );
    }
}
0 голосов
/ 25 ноября 2018

Полагаю, вам нужно позвонить SetConsoleCtrlHandler, чтобы предоставить обработчик для обработки события закрытия.Примерно так:

BOOL WINAPI MyCtrlHandler (DWORD dwCtrlType)
{
    if (dwCtrlType == CTRL_CLOSE_EVENT)
        ...
}

SetConsoleCtrlHandler (MyCtrlHandler, TRUE);

Возможно, вы хотите обрабатывать различные значения dwCtrlType различными способами.За подробностями обращайтесь к документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...