2017-06-15 112 views
2

這不是重複的! - 看完評論後,也許就是了。SetConsoleMode失敗,爲零,lasterror = 0

我一直在尋找一種方式,以斜體在控制檯應用程序的控制檯輸出文本,在C#,Visual Studio的2015年,瞄準的.NET Framework 4.5.2,OS = Windows 7的

微軟文檔是很清楚

這是here - 它是如此的誤導,這是錯誤的。這是一個操作系統問題。

我發現與做什麼,我想弗拉基米爾尼科夫解決以下問題,

adding text decorations to console output

在其中一個答案回答3月28日在19:52和代碼像它在Git中,和其他地方......我的問題是 - 自然 - 它不適合我。

我複製作者的輕微MODS的代碼爲以下控制檯應用程序

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命令窗口,而不是下劃線,作爲文章。

這裏是我的控制檯窗口:Console Window

我被困從ConsoleSetMode的返回值 - 這是零。我已經看到這個失敗與lasterror = 6,但這裏lasterror是0.

認爲這是最近更新? ... 或者其他的東西?這是一個Windows版本問題 - 顯然,Windows 10 AU是必需的。

+0

這隻適用於W8或更高版本。 – Gusman

+1

https://stackoverflow.com/questions/38772468/setconsolemode-and-enable-virtual-terminal-processing – Gusman

+0

@Gusman在Windows 8.1上不適用於我。你的意思是Windows 10? – GSerg

回答

1

確保勾選「使用原有的控制檯」傍控制檯屬性的底部沒有設置:

Console Properties

如果您沒有看到此複選框,那麼你可能使用太舊版本的Windows。

您可以使用註冊表項HKCU\Console\ForceV2以編程方式操作此複選框,如this answer中所述。

+0

好複查,弗拉德。謝謝! –

0

好的。這是重複的 - 有點。在Gusman提到的問題的答案中,SetConsoleMode() and ENABLE_VIRTUAL_TERMINAL_PROCESSING?(我找不到,但應該有) - 此功能僅在Windows 10上可用(還有...根據TamásDeme'tomzorz',僅在或在Windows 10 AU之後),儘管微軟宣稱它可以在Windows 2000和更高版本上使用。

因此,答案是:它不工作,並不會在Windows 10,直到Windows 7已經被從地球上清除這是一個死衚衕除外,而且也沒有機會,它必須通過QC在Windows 7上。

到那時,控制檯應用程序將被法律禁止。

+1

「Windows 2000及更高版本」中提供的是SetConsoleMode函數 - 這幾乎是正確的,因爲Windows 2000是當前最早的「受支持」里程碑,即使對於自Windows 95以後的函數,它也會顯示。所以這一部分是正確的,但他們確實忘記了爲個別常量指示不同的支持水平,就像他們爲例如[SystemParametersInfo](https://msdn.microsoft.com/en-us/library/windows/desktop/ms724947(V = vs.85)的.aspx)。可以作爲文檔錯誤報告。 – GSerg

相關問題