如何使用 C# 获取终端的功能?

问题描述

我的英语可能不太好,如果我写的不好或不正确,请告诉我。

我正在用 C# 创建一个 Lolcat。我已经完成了输出功能,但是遇到了一个问题:有些终端不支持256(8位)色,这是Lolcat的最低要求。在 Python 中,由于 Rich 模块,我可以找到什么 颜色 系统(无颜色标准( 16 色,4 位)256(8 位)TrueColor(16m,24 位)) 使用以下脚本:

#!/usr/bin/env python3

import rich
from rich.console import Console

console = Console()

def detect_color_support():
    """
    Detects if terminal supports following colors: Standard (16 colors),256 and True (16m) colors
    :return: detection results in tuple (Standard,256,True)
    """
    supports_standard_colors = False
    supports_256_colors = False
    supports_true_colors = False

    if console.color_system == "truecolor":
        supports_standard_colors = True
        supports_256_colors = True
        supports_true_colors = True
    elif console.color_system == "256":
        supports_standard_colors = True
        supports_256_colors = True
    elif console.color_system == "standard":
        supports_standard_colors = True
    return supports_standard_colors,supports_256_colors,supports_true_colors

但是如何在 C# 中做到这一点? 有 PythonRich 灵感库,名为 Spectre.Console,但以相同方式使用时:

using System;
using Spectre.Console;

namespace CCM
{
    class Program
    {
        private static Tuple<int?,string> ColorSystemConverter(ColorSystem colorSystem) => (int)colorSystem switch
        {
            1 => new Tuple<int?,string>(3,"Legacy"),2 => new Tuple<int?,string>(4,"Standard"),3 => new Tuple<int?,string>(8,"256"),4 => new Tuple<int?,string>(24,"TrueColor"),_ => new Tuple<int?,string>(null,"NoColors"),};
        static void Main()
        {
            Console.WriteLine(ColorSystenConverter(AnsiConsole.Console.Profile.Capabilities.ColorSystem).Item2);
            Console.ReadLine();
        }
    }
}

当我在 CMD命令提示符,但不是在 Windows 终端)中运行它时,它会打印“TrueColor”,但据我所知CMD 不支持 24 位颜色(至少是我的)。是否有任何有效且有效的方法来查看控制台功能,包括Ansi 支持、Unicode 支持等?

附加信息:

操作系统:Windows 10

版本/内部版本:10.0.18363.0

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)