Jaki jest najlepszy sposób zapisu danych na konsoli tekstowej w dowolnych miejscach na ekranie i niestandardowych kolorach tła/tła?Advanced Console IO w .NET
Odpowiedz
Console.SetCursorPosition, Console.BackgroundColor, Console.ForegroundColor i Console.ResetColor.
Uwaga: zostały one dodane do .NET Framework w wersji 2.0. Wcześniej będziesz potrzebował PInvoke.
Według Mono Library List istnieją co najmniej dwie biblioteki, które mogą być przydatne dla Ciebie:
Curses# używa PDCurses na Windows i Linux na ncurses. To prawie crossplatform na poziomie binarnym.
MonoCurses jest licencjonowanym wiązaniem curses MIT-X11 i zawiera minimalistyczny zestaw narzędzi GUI.cs GUI do tworzenia aplikacji konsolowych.
This posting pokazuje, jak użyć metod klasy Console, aby utworzyć pasek postępu na konsoli - może to być dobry przykład odnosi się do ....
Najbardziej skuteczna funkcja jest WriteConsoleOutput
. Pochodzi Win32 API, ale mogą być używane w aplikacji .NET przy użyciu p/wywołać:
[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);
Gdzie CHAR_INFO jest strukturą:
/// <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 struktura:
/// <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 i 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. Oracle Advanced Queuing with .Net
- 2. Android: advanced ColorPickerDialog
- 3. Jak ustawić domyślną wartość wejściową w aplikacji .Net Console?
- 4. .NET wątki wątków i asynchroniczne wątki IO
- 5. Rails "script/console" vs. "script/console --sandbox"
- 6. Zbuduj aplikację .NET Core Console, aby wyprowadzić plik EXE?
- 7. Advanced Rest Client Client Self-Signed Certificate
- 8. Jak utworzyć testowalny kod za pomocą klas .Net IO?
- 9. java console charset translation
- 10. C++ Win32 Console Color
- 11. Python Console Website
- 12. Problem Eclipse Console
- 13. Haskell monada: IO [Double] do [IO Double]
- 14. Filtr IO [Maybe String] na IO [String]
- 15. Konwertuj [IO Int] na IO [Int] w Haskell?
- 16. Jak zrobić polimorficzne IO (plik lub stdin) w Rust?
- 17. Autouzupełnianie oparte na tabulatorach w aplikacji Console
- 18. Subdomena w Google Console Przekierowanie URI
- 19. C++ interpreter/console/snippet compiler
- 20. Metal Shading Language - (Console) Output?
- 21. Zrozumienie konsoli Google Developer Console
- 22. Emacs ESS wersja Clear Console
- 23. działania Sekwencjonowanie IO w równoległym
- 24. Metoda pomijania() w IO java?
- 25. Wyświetlacz Hibernate SQL Console (wiosna)
- 26. Błąd krytyczny: Class 'Symfony \ Komponent \ Console \ wejściowe \ ArgvInput' nie znaleziono w app/console on line 16
- 27. Jaka jest różnica między maven dependencies org.apache.commons: commons-io i commons-io: commons-io?
- 28. Dlaczego istnieje zagnieżdżona monada IO, IO (IO()), jako wartość zwracana przez moją funkcję?
- 29. Różnica między IO-APIC-fasteoi i IO-APIC-edge
- 30. Uwierzytelnianie przeciwko programowi AD FS za pośrednictwem aplikacji .Net 4.5 Console