让控制台支持 ANSI 转义序列,输出下划线、修改颜色或其他控制

栏目: ASP.NET · 发布时间: 6年前

内容简介:各种操作系统的控制台都支持 ANSI 转义序列(ANSI Escape Code)。使用转义序列,可以对控制台进行很多额外的定制,例如修改颜色、修改标题栏,将文字添加下划线等。当然,.NET 已经帮助我们封装了很大的一部分功能了,我们重点可以放在 .NET 没有封装的那部分上。在开始之前,我们先添加一些基础性代码,这是对系统核心功能的调用。

各种操作系统的控制台都支持 ANSI 转义序列(ANSI Escape Code)。使用转义序列,可以对控制台进行很多额外的定制,例如修改颜色、修改标题栏,将文字添加下划线等。

当然,.NET 已经帮助我们封装了很大的一部分功能了,我们重点可以放在 .NET 没有封装的那部分上。

基本的准备代码

在开始之前,我们先添加一些基础性代码,这是对系统核心功能的调用。

const int STD_OUTPUT_HANDLE = -11;
const uint ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004;

[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr GetStdHandle(int nStdHandle);

[DllImport("kernel32.dll")]
static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode);

[DllImport("kernel32.dll")]
static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode);

在 Main 函数中,添加一些调用:

static void Main(string[] args)
{
    Console.Title = "Walterlv.Demo";

    var handle = GetStdHandle(STD_OUTPUT_HANDLE);
    GetConsoleMode(handle, out var mode);
    mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
    SetConsoleMode(handle, mode);

    // 我们准备在这里添加新的代码。
    
    Console.Read();
}

开始使用 ANSI 转义序列

添加下划线

const string UNDERLINE = "\x1B[4m";
const string RESET = "\x1B[0m";
Console.WriteLine($"Some {UNDERLINE}underlined{RESET} text");

让控制台支持 ANSI 转义序列,输出下划线、修改颜色或其他控制 ▲ 下划线转义

修改颜色

const string RED = "\x1B[31m";
Console.WriteLine($"Some {UNDERLINE}underlined{RESET} and {RED}red{RESET} text");

让控制台支持 ANSI 转义序列,输出下划线、修改颜色或其他控制 ▲ 颜色转义(当然,.NET 封装有 API)

其他转义序列

其他转义序列,可阅读 ANSI escape code - Wikipedia 。不过 Windows 能支持的并不多。

关于颜色,不同控制台上对于相同转义序列的颜色值和颜色支持程度也不同。

关于 ENABLE_VIRTUAL_TERMINAL_PROCESSING

这是用来开启虚拟终端处理的一个标识,Windows 从一开始就默认关闭这个标识,必须通过 SetConsoleMode 手工开启。虽然在 10.0.10586 版本时短暂开启了一个版本,随后在 10.0.14393 中又再次默认关闭了。

参考资料

本文会经常更新,请阅读原文: https://walterlv.github.io/post/enable-virtual-terminal-processing.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

让控制台支持 ANSI 转义序列,输出下划线、修改颜色或其他控制 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系


以上所述就是小编给大家介绍的《让控制台支持 ANSI 转义序列,输出下划线、修改颜色或其他控制》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

软件开发本质论

软件开发本质论

Ron Jeffries / 王凌云 / 人民邮电出版社图灵分社 / 2017-1 / 39

想象你正在攀登一座名为“软件开发”的山峰。本书是与你同登一座山峰的敏捷先驱所带来的话语与图片。他在崎岖的山路边找到相当平坦的歇脚处,画下所见的风景,并写下自己的想法和发现。他瞧见很多条上山的路,愿以此书与你分享哪条路容易、哪条路困难、哪条路安全、哪条路危险。他还想指引你欣赏身后的美景。正是这些美景丰富了你的登山之旅,让你在重重困难中收获成长。 “对于每一位CTO、技术VP、软件产品总......一起来看看 《软件开发本质论》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码

html转js在线工具
html转js在线工具

html转js在线工具