隐藏新的 Windows 终端

3

我曾经使用以下方法隐藏我的后台应用程序的控制台窗口,直到需要它:

ShowWindow(console_hwnd,SW_HIDE);

我的Windows系统进行了更新,将“Windows Terminal”设置为默认的控制台应用程序。 那行代码不再起作用,只是将控制台最小化到任务栏。有什么正确的方法可以完全隐藏Windows Terminal?

编辑: 请仔细阅读问题。它说要隐藏控制台窗口。而不是完全删除控制台。我需要能够稍后再次显示它。这就是SW_HIDE和SW_SHOW的目的,但它们在新的Windows Terminal中不再起作用。


1
这不是它应该工作的方式。要获取隐藏的应用程序,您需要将其编译为Windows子系统,而不是控制台子系统。如果您想要分配一个新的控制台,那么该应用程序需要是GUI。即使在其他操作系统中,控制台应用程序也无法被隐藏。它们只能被移动到后台。 - phuclv
2
@phuclv那为什么它在经典的Windows控制台上运行得非常完美呢?我可以隐藏它,当我需要再次显示它时,我调用SW_SHOW,它就会再次出现。 - Alex
旧版的conhost.exe只允许单个进程附加,而现代终端则允许多个选项卡。那么行为会是什么呢?隐藏所有还是只隐藏一个选项卡?这两种都不合理。此外,微软已经弃用了旧的控制台API,并转向使用通用的ANSI序列,以获得更好的远程体验和可移植性。 - phuclv
在一些先前的文档版本中,微软曾表示控制台API已被弃用,并且将来不会更新。但是后来当WriteConsole被修复以支持UTF-8时,他们删除了弃用说明,但仍然建议使用虚拟终端序列作为与终端交互的方式,对于Windows上的所有新开发和正在进行的开发 - phuclv
提及终端序列是无关紧要的,因为这些序列与控制台窗口/选项卡的可见性无关。 - undefined
显示剩余5条评论
1个回答

0
如果您想随时显示控制台,可以通过更改控制台的坐标来隐藏和显示控制台。
int main() {
  HWND consoleWindow = GetConsoleWindow();
  SetWindowPos(consoleWindow, 0, -600, -600, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
  return 0;
}

编辑:

根据这个文档ShowWindow()的第二个参数在第一次调用时可能会被忽略。尝试调用两次。

ShowWindow(hWnd, SW_HIDE);
ShowWindow(hWnd, SW_HIDE);

此外,您以管理员身份运行了这个程序吗?如果是的话,我建议您取消它,因为该窗口处于更高特权进程中,所以您的调用将被忽略。
希望能有所帮助。

调用ShowWindow两次不起作用,将窗口移出屏幕也是一个不理想的解决办法,因为你需要检查所有连接的显示器的坐标,并计算一个不重叠的新位置。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接