我读了微软的this article关于控制台虚拟终端序列的使用。
我按照以下顺序更改窗口标题:
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;titel\x07");
return 0;
}
它不会更改控制台窗口标题。
1条答案
按热度按时间zzwlnbp81#
Microsoft文档建议:
请注意,这些序列是OSC“操作系统命令”序列,而不是与所列出的许多其他序列一样的CSI,因此以“\x1b]"而不是“\x1b["开始。作为OSC序列,它们以表示为ESC\(0x 1B 0x 5C)的字符串终止符结束,并以ESC \(0x 1B 0x 5C)传输。BEL(0x 7)可用作终止符,但首选较长的形式。
这不是MS第一次没有实现一些东西。试试Esc \ -它对我很有效。
也就是说,我在调试过程中注意到窗口标题不会立即更改,并且由于您在序列之后立即终止程序,因此可能看不到效果。