將數據寫入屏幕任意位置的文本控制檯並使用自定義前/後顏色的最佳方式是什麼?.NET中的高級控制檯輸入
16
A
回答
23
Console.SetCursorPosition,Console.BackgroundColor,Console.ForegroundColor和Console.ResetColor。
注意這些已添加到版本2.0中的.NET Framework。在此之前,您將需要PInvoke。
6
按照Mono Library List至少有兩個庫,可能對您有用:
Curses#使用在Windows PDCurses和ncurses的Linux操作系統。它幾乎是二進制級別的跨平臺。
MonoCurses是curses的MIT-X11許可綁定,它包括用於創建基於控制檯的應用程序的minimalistic gui.cs GUI工具包。
4
This posting展示瞭如何使用Console類的方法來創建控制檯上的進度條 - 這可能是一個很好的例子,指....
2
最有效的功能是WriteConsoleOutput
。它是天然的Win32 API,但可在.NET應用程序使用對可使用/調用:
[DllImport("kernel32.dll", SetLastError = true, EntryPoint = "WriteConsoleOutputW")]
public static extern bool WriteConsoleOutput(IntPtr hConsoleOutput, CHAR_INFO[,] lpBuffer, COORD dwBufferSize,
COORD dwBufferCoord, ref SMALL_RECT lpWriteRegion);
凡CHAR_INFO是這樣的結構:
/// <summary>
/// CharSet.Unicode is required for proper marshaling.
/// </summary>
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)]
public struct CHAR_INFO
{
[FieldOffset(0)]
public char UnicodeChar;
[FieldOffset(0)]
public char AsciiChar;
[FieldOffset(2)] //2 bytes seems to work properly
public Attr Attributes;
public override string ToString() {
return string.Format("CHAR_INFO : '{0}' ({1})", AsciiChar, Attributes);
}
}
的Attr結構:
/// <summary>
/// CHAR_ATTRIBUTES native structure.
/// </summary>
[Flags]
public enum Attr : ushort {
NO_ATTRIBUTES = 0x0000,
/// <summary>
/// Text color contains blue.
/// </summary>
FOREGROUND_BLUE = 0x0001,
/// <summary>
/// Text color contains green.
/// </summary>
FOREGROUND_GREEN = 0x0002,
/// <summary>
/// Text color contains red.
/// </summary>
FOREGROUND_RED = 0x0004,
/// <summary>
/// Text color is intensified.
/// </summary>
FOREGROUND_INTENSITY = 0x0008,
/// <summary>
/// Background color contains blue.
/// </summary>
BACKGROUND_BLUE = 0x0010,
/// <summary>
/// Background color contains green.
/// </summary>
BACKGROUND_GREEN = 0x0020,
/// <summary>
/// Background color contains red.
/// </summary>
BACKGROUND_RED = 0x0040,
/// <summary>
/// Background color is intensified.
/// </summary>
BACKGROUND_INTENSITY = 0x0080,
/// <summary>
/// Leading byte.
/// </summary>
COMMON_LVB_LEADING_BYTE = 0x0100,
/// <summary>
/// Trailing byte.
/// </summary>
COMMON_LVB_TRAILING_BYTE = 0x0200,
/// <summary>
/// Top horizontal
/// </summary>
COMMON_LVB_GRID_HORIZONTAL = 0x0400,
/// <summary>
/// Left vertical.
/// </summary>
COMMON_LVB_GRID_LVERTICAL = 0x0800,
/// <summary>
/// Right vertical.
/// </summary>
COMMON_LVB_GRID_RVERTICAL = 0x1000,
/// <summary>
/// Reverse foreground and background attribute.
/// </summary>
COMMON_LVB_REVERSE_VIDEO = 0x4000,
/// <summary>
/// Underscore.
/// </summary>
COMMON_LVB_UNDERSCORE = 0x8000
}
COORD和SMALL_RECT:
[StructLayout(LayoutKind.Sequential)]
public struct COORD
{
public short X;
public short Y;
public COORD(short X, short Y)
{
this.X = X;
this.Y = Y;
}
};
[StructLayout(LayoutKind.Sequential)]
public struct SMALL_RECT
{
public short Left;
public short Top;
public short Right;
public short Bottom;
public SMALL_RECT(short left, short top, short right, short bottom) {
Left = left;
Top = top;
Right = right;
Bottom = bottom;
}
}
相關問題
- 1. 高級Java控制檯輸入
- 2. 在控制檯中輸入輸入
- 3. C#高級控制檯I/O
- 4. '高級'控制檯應用程序
- 5. Java控制檯輸出成爲下一個控制檯輸入
- 6. C#:從控制檯輸出分離控制檯輸入
- 7. 控制檯輸入直到。並輸入
- 8. 從控制檯輸入java輸入
- 9. C#控制檯輸入
- 10. 控制檯忽略輸入
- 11. 輸入值在控制檯
- 12. QtCreator 2.4.1控制檯輸入
- 13. Apache-Camel控制檯輸入
- 14. 控制檯輸入掩碼
- 15. java控制檯輸入
- 16. 從控制檯輸入流
- 17. 標準控制檯輸入
- 18. Windows控制檯中的C++鍵輸入
- 19. C#控制檯 - 在輸入時隱藏控制檯窗口的輸入
- 20. 控制ASP .Net中繼器控制輸出高度
- 21. .NET控制檯輸出和PSEXEC
- 22. 錯誤輸出控制檯.NET
- 23. 用C++程序控制臺輸入的崇高文本
- 24. 參數化觸發器 - 在父級控制檯輸出中包含子級控制檯輸出
- 25. Xcode 6.1控制檯輸入/輸出
- 26. Asm控制檯輸入/輸出
- 27. 捕捉控制檯輸入輸出
- 28. 基本控制檯輸入和輸出
- 29. 從方法寫入控制檯.NET 4.0
- 30. 是否可以完全捕獲Windows控制檯應用程序的控制檯輸出(包括高級操作)?