SetConsoleMode失败,为零,lasterror = 0

Max*_*uwe 5 c# formatting console-application

这不是重复的!-好吧,看完评论后,也许是。

我一直在寻找一种在C#,Visual Studio 2015,Targeting .NET Framework 4.5.2,OS = Windows 7中在控制台应用程序的控制台输出中使文本变为斜体的方法。

Microsoft文档非常清晰

这是在这里 -它是如此误导这是错的。这是一个操作系统问题。

我找到了以下问题,并提出了一种解决方案,该解决方案符合弗拉基米尔·雷谢尼科夫(Vladimir Reshetnikov)的要求,

将文本装饰添加到控制台输出

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

而且我在窗口中获得了VT命令,而不是像本文中的下划线所示。

这是我的控制台窗口:控制台窗口

我已经从ConsoleSetMode捕获了返回值-它为零。我已经看到了lasterror = 6的失败,但是这里的lasterror是0。

认为这是最近的更新?... 或者其他的东西?[edit]这是Windows版本的问题-显然需要Windows 10 AU。

Vla*_*kov 3

确保未设置控制台属性底部附近的“使用旧版控制台”复选框:

控制台属性

如果您没有看到此复选框,则您可能使用的 Windows 版本太旧。

您可以使用注册表项以编程方式操作此复选框,如本答案HKCU\Console\ForceV2中所述。