PostMessage 无法在 winform 应用程序中使用分配的控制台
PostMessage Not working with allocated console in winform app
所以我得到了一个 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();
}
}
每当我点击复选框时,它会分配一个控制台,然后当我取消选中复选框时,它会使用内部的 GetConsoleWindow
函数存储控制台的 H-window allocatedConsole
然后尝试使用带有 WM_CLOSE
消息的 PostMessageA
函数远程关闭 allocatedConsole
,最后它被释放了。
然而,当我取消选中复选框时,它释放了控制台,但根本没有关闭它。
提前致谢。
尝试使用 wParam
= SC_CLOSE
发送 WM_SYSCOMMAND
消息。这更接近于从系统菜单中选择 'Close'。
所以我得到了一个 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();
}
}
每当我点击复选框时,它会分配一个控制台,然后当我取消选中复选框时,它会使用内部的 GetConsoleWindow
函数存储控制台的 H-window allocatedConsole
然后尝试使用带有 WM_CLOSE
消息的 PostMessageA
函数远程关闭 allocatedConsole
,最后它被释放了。
然而,当我取消选中复选框时,它释放了控制台,但根本没有关闭它。
提前致谢。
尝试使用 wParam
= SC_CLOSE
发送 WM_SYSCOMMAND
消息。这更接近于从系统菜单中选择 'Close'。