无法使用虚拟终端序列更改控制台应用程序窗口标题



我阅读了微软关于使用控制台虚拟终端序列的文章。

我按照这个顺序更改窗口标题:

ESC ] 2 ; <string> BEL  

我也试过:

ESC ] 0 ; <string> BEL  

但它并没有改变标题。

这是我的代码:

#include <stdio.h>
#include <wchar.h>
#include <windows.h>
int main()
{
// https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences
// Set output mode to handle virtual terminal sequences
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (hOut == INVALID_HANDLE_VALUE)
{
return GetLastError();
}
DWORD dwMode = 0;
if (!GetConsoleMode(hOut, &dwMode))
{
return GetLastError();
}
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
if (!SetConsoleMode(hOut, dwMode))
{
return GetLastError();
}
// Try some Set Graphics Rendition (SGR) terminal escape sequences
wprintf(L"hello");
wprintf(L"x1b]2;titelx07");
return 0;
}

它不会更改控制台窗口的标题。

微软文档建议:

请注意,这些序列是OSC"操作系统命令"序列,而不是像列出的许多其他序列那样的CSI,因此以"\x1b]"开头,不是"\x1b["。作为OSC序列,它们以字符串终止符结束,表示为ESC\(0x1B 0x5C(并以ESC\(0x7(传输。可以使用BEL(0x7

这不是MS第一次没有实现某些东西。试试Esc\-它对我有效。

也就是说,我在调试过程中注意到,窗口标题不会立即更改,而且由于您在序列结束后立即终止程序,因此可能看不到效果。

相关内容

最新更新