PostMessage Не работает с выделенной консолью в приложении winform - PullRequest
2 голосов
/ 02 мая 2020

ТАК Я получил приложение формы c++/cli, в котором есть флажок (отладка на китайском языке) с именем checkBox3 внутри моего приложения:

Это код флажка:

private: System::Void checkBox3_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {
        //set the debug flag
        g.debug = !g.debug;
        HWND allocatedConsole = NULL;
        if (this->checkBox3->Checked == true)
        {
            AllocConsole();
            freopen("CONOUT$", "w", stdout);//use cout
        }
        else {
            allocatedConsole = GetConsoleWindow();
            std::cout << allocatedConsole << std::endl;
            PostMessageA(allocatedConsole, WM_CLOSE, 0, 0);
            FreeConsole();
        }
    }

. При этом каждый раз, когда я нажимаю на флажок, он выделяет консоль, а затем, когда я снимаю флажок, он сохраняет H-окно консоли, используя * 1011. * функция внутри allocatedConsole, а затем пытается удаленно закрыть allocatedConsole, используя функцию PostMessageA с сообщением WM_CLOSE, и, наконец, оно освобождается.

Однако, когда я сниму флажок это бесплатно консоль, но не закрывает ее вообще .

Заранее спасибо.

1 Ответ

3 голосов
/ 02 мая 2020

Попробуйте отправить сообщение WM_SYSCOMMAND с wParam = SC_CLOSE. Это более точно имитирует выбор «Закрыть» из системного меню.

...