【发布时间】:2017-06-15 18:14:56
【问题描述】:
这不是重复的! - 嗯,看完了cmets,也许是吧。
我正在寻找一种在控制台应用程序的控制台输出中斜体文本的方法,使用 c#、Visual Studio 2015、Targeting .NET Framework 4.5.2、OS = Windows 7。
微软文档很清楚
它是here - 它非常具有误导性,它是错误的。这是一个操作系统问题。
Vladimir Reshetnikov 用我想要的解决方案找到了以下问题,
adding text decorations to console output
在 3 月 28 日 19:52 回答了其中一个答案,并在 git 和其他地方编写了类似的代码......我的问题是 - 自然 - 它对我不起作用。
我将作者的代码和小修改复制到以下控制台应用程序中
using System;
using System.Runtime.InteropServices;
namespace ConsoleApplication1
{
class Program
{
const int STD_OUTPUT_HANDLE = -11;
const uint ENABLE_VIRTUAL_TERMINAL_PROCESSING = 4;
[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);
static void Main()
{
var handle = GetStdHandle(STD_OUTPUT_HANDLE);
uint mode;
GetConsoleMode(handle, out mode);
mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
SetConsoleMode(handle, mode);
const string UNDERLINE = "\x1B[4m";
const string RESET = "\x1B[0m";
Console.WriteLine("Some " + UNDERLINE + "underlined" + RESET + " text");
Console.ReadLine();
}
}
}
我在窗口中得到了 VT 命令,而不是文章中的下划线。
我已经捕获了 ConsoleSetMode 的返回值 - 它为零。我已经看到了 lasterror = 6 的失败,但这里的 lasterror 是 0。
认为这是最近的更新? ... 或者其他的东西? [编辑] 这是一个 Windows 版本问题 - 显然需要 Windows 10 AU。
【问题讨论】:
-
这仅适用于 W8 或更高版本。
-
@Gusman 在 Windows 8.1 上对我不起作用。你是说 Windows 10 吗?
-
对不起,错了,只有W10,看附件。
-
在 Win10 的控制台上做了很多工作来支持 ENABLE_VIRTUAL_TERMINAL_PROCESSING 选项,使其表现得更像是 1970 年的东西。已完成支持新 Linux 子系统的工作。
标签: c# formatting console-application