суббота, 16 апреля 2011 г.

Не стандартная работа с консолью.

Парочка методов для не стандартной работы с консолью.

Вывод цветного текста в консоль.

using System;
using System.Runtime.InteropServices;
 
namespace ConsoleExt
{
 public class ConsoleColorManager
 {
  private Handles m_Handle;
 
  // Константы потоков консоли
  public enum Handles
  {
   STD_INPUT_HANDLE  = -10,
   STD_OUTPUT_HANDLE = -11,
   STD_ERROR_HANDLE  = -12
  }
 
 
  // Импортируем методов
  [DllImportAttribute("Kernel32.dll")]
  private static extern IntPtr GetStdHandle
  (
   int nStdHandle      // тип консольного потока
  );
 
  [DllImportAttribute("Kernel32.dll")]
  private static extern bool SetConsoleTextAttribute
  (
   IntPtr hConsoleOutput,  // дескриптор потока
   int wAttributes         // цвет текста и фона 
  );
 
  // Цвета (флаги)
  [Flags]
  public enum Color
  {
   Black = 0x0000,
   Blue = 0x0001,
   Green = 0x0002, 
   Cyan = 0x0003,
   Red  = 0x0004,
   Magenta = 0x0005,
   Yellow = 0x0006,
   Grey = 0x0007,
   White = 0x0008
  }
 
  // По выбираем поток OUTPUT 
  public ConsoleColorManager()
  {
   m_Handle = Handles.STD_OUTPUT_HANDLE;
  }
 
  public ConsoleColorManager(Handles Handle)
  {
   m_Handle = Handle;
  }
 
  // установка цвета по умолчанию
  public bool SetDefaultColor()
  {
   return SetColor(Color.Grey, true);
  }
 
  // установка цвета текста
  // флаг fLight задает яркость цвета
  public bool SetColor(Color aColor, bool fLight)
  {
   // получаем дескриптор
   IntPtr ConsoleHandle = GetStdHandle((int)m_Handle);
      
   // получаем цвет
   int colorMask = (int)aColor;
 
   // если нужен яркий цвет, добавляем White
   if (fLight)
    colorMask |= (int)Color.White;
 
   // устанавливаем цвет текста
   return SetConsoleTextAttribute(ConsoleHandle, colorMask);
  }
 }

Пример C#  изменения цвета текста при выводе в консоль:



class сlass
{
 static void Агтс()
 {
  ConsoleColorManager colorManager = new ConsoleColorManager();
  
  // установка цвета
  colorManager.SetColor(ConsoleColorManager.Color.Green, true);
  Console.WriteLine("Красивый зеленый цвет текста");
 
  // изменение цвета
  colorManager.SetColor(ConsoleColorManager.Color.Red  , false);
  Console.WriteLine("Красный текст");
 
  // Восстанавливаем цвет по умолчанию
  colorManager.SetDefaultColor();
 
  Console.ReadLine();
 }
}
 

Изменение заголовка консольной программы C#.



using System;
using System.Runtime.InteropServices;
 
 
 class Сlass
 {
  [DllImport("kernel32.dll")]
  public static extern bool SetConsoleTitle(String lpConsoleTitle);
 
  
  static void Metod()
  {
   SetConsoleTitle("New title");
  }
 }

1 комментарий: