如何完全隐藏新版Windows Terminal?原SW_HIDE代码仅实现最小化
解决Windows Terminal下无法隐藏控制台窗口的问题
当Windows默认控制台切换为Windows Terminal后,原有的ShowWindow(console_hwnd, SW_HIDE)仅会将标签页最小化到任务栏,无法完全隐藏窗口。以下是几种可行的解决方案,均支持后续重新显示控制台:
方法1:定位Windows Terminal主窗口句柄并控制
Windows Terminal的主窗口类名为CASCADIA_HOSTING_WINDOW_CLASS,你需要枚举系统窗口,找到与当前进程关联的WT主窗口,再对其调用ShowWindow。
示例代码(C++):
#include <windows.h> #include <tlhelp32.h> HWND FindWtWindowForCurrentProcess() { DWORD currentPid = GetCurrentProcessId(); HWND wtWindow = NULL; EnumWindows([](HWND hwnd, LPARAM lParam) -> BOOL { char className[256]; GetClassNameA(hwnd, className, sizeof(className)); if (strcmp(className, "CASCADIA_HOSTING_WINDOW_CLASS") == 0) { DWORD windowPid; GetWindowThreadProcessId(hwnd, &windowPid); // 匹配当前进程关联的WT窗口,可通过窗口标题进一步精确匹配 if (windowPid == *(DWORD*)lParam) { *(HWND*)lParam = hwnd; return FALSE; } } return TRUE; }, (LPARAM)¤tPid); return wtWindow; } // 使用示例 HWND wtHwnd = FindWtWindowForCurrentProcess(); if (wtHwnd) { ShowWindow(wtHwnd, SW_HIDE); // 隐藏WT窗口 // 后续需要显示时调用 // ShowWindow(wtHwnd, SW_SHOW); }
方法2:强制使用传统控制台
如果不需要Windows Terminal的功能,可切换回传统控制台,让原有代码恢复生效:
单程序临时设置
右键程序快捷方式→属性→切换到"选项"(部分版本在"兼容性")标签→勾选"使用旧版控制台"。
全局系统设置
- 打开Windows Terminal,按
Ctrl+,进入设置界面 - 找到"默认终端应用"选项,设置为"Windows控制台主机"
- 重启程序后,原有
ShowWindow(console_hwnd, SW_HIDE)即可正常隐藏窗口
方法3:用SetWindowPos实现更可靠的隐藏
利用GetConsoleWindow获取句柄后,使用SetWindowPos直接隐藏窗口,部分场景下比ShowWindow更稳定:
示例代码(C++):
HWND consoleHwnd = GetConsoleWindow(); if (consoleHwnd) { // 完全隐藏窗口(从任务栏移除) SetWindowPos(consoleHwnd, HWND_TOP, 0, 0, 0, 0, SWP_HIDEWINDOW | SWP_NOMOVE | SWP_NOSIZE); // 后续显示窗口 // SetWindowPos(consoleHwnd, HWND_TOP, 0, 0, 800, 600, SWP_SHOWWINDOW | SWP_NOMOVE); }
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

