这不是重复的! -好吧,看完评论后,也许是。
我正在寻找一种在C#,Visual Studio 2015,Targeting .NET Framework 4.5.2,OS = Windows 7中在控制台应用程序的控制台输出中将文本斜体化的方法。
Microsoft文档非常清晰
这是here-如此令人误解,这是错误的。这是一个操作系统问题。
我发现以下问题与Vladimir Reshetnikov想要的解决方案相符,
adding text decorations to console output
3月28日在19:52回答了其中一个问题,并在git和其他地方编写了类似的代码...我的问题是-自然地-它对我不起作用。
我将带有次要mod的作者代码复制到以下控制台应用程序中
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。
认为这是最近的更新? ... 或者其他的东西? [edit]这是Windows版本的问题-显然需要Windows 10 AU。
最佳答案
确保未设置控制台属性底部附近的复选框“使用旧版控制台”:
如果没有看到此复选框,则可能是您使用的Windows版本太旧。
您可以使用注册表项HKCU\Console\ForceV2
以编程方式操作此复选框,如this answer中所述。
关于c# - SetConsoleMode失败,为零,lasterror = 0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44574274/