Данная статья переведена с помощью средств машинного перевода. Чтобы просмотреть ее на английском языке, установите флажок Английский. Вы также можете просматривать английский текст во всплывающем окне, наводя указатель мыши на переведенный текст.
Перевод
Английский

Класс Console

 

Опубликовано: Октябрь 2016

Предоставляет стандартные потоки для консольных приложений: входной, выходной и поток сообщений об ошибках. Этот класс не наследуется.

Для просмотра исходного кода .NET Framework для этого типа, в разделе Reference Source.

Пространство имен:   System
Сборка:  mscorlib (в mscorlib.dll)


ИмяОписание
System_CAPS_pubpropertySystem_CAPS_staticBackgroundColor

Возвращает или задает цвет фона консоли.

System_CAPS_pubpropertySystem_CAPS_staticBufferHeight

Возвращает или задает высоту буферной области.

System_CAPS_pubpropertySystem_CAPS_staticBufferWidth

Возвращает или задает ширину буферной области.

System_CAPS_pubpropertySystem_CAPS_staticCapsLock

Возвращает значение, указывающее, включен или отключен режим CAPS LOCK клавиатуры.

System_CAPS_pubpropertySystem_CAPS_staticCursorLeft

Возвращает или задает позицию столбца курсора в буферной области.

System_CAPS_pubpropertySystem_CAPS_staticCursorSize

Возвращает или задает высоту курсора в символьной ячейке.

System_CAPS_pubpropertySystem_CAPS_staticCursorTop

Возвращает или задает позицию строки курсора в буферной области.

System_CAPS_pubpropertySystem_CAPS_staticCursorVisible

Возвращает или задает значение, указывающее, видим ли курсор.

System_CAPS_pubpropertySystem_CAPS_staticError

Возвращает стандартный выходной поток сообщений об ошибках.

System_CAPS_pubpropertySystem_CAPS_staticForegroundColor

Возвращает или задает цвет фона консоли.

System_CAPS_pubpropertySystem_CAPS_staticIn

Возвращает стандартный входной поток.

System_CAPS_pubpropertySystem_CAPS_staticInputEncoding

Возвращает или задает кодировку консоли, используемую при чтении входных данных.

System_CAPS_pubpropertySystem_CAPS_staticIsErrorRedirected

Получает значение, показывающее, был ли перенаправлен выходной поток ошибок от стандартного потока ошибок.

System_CAPS_pubpropertySystem_CAPS_staticIsInputRedirected

Получает значение, показывающее, был ли перенаправлены ли входные данные от стандартного входного потока.

System_CAPS_pubpropertySystem_CAPS_staticIsOutputRedirected

Получает значение, показывающее, был ли перенаправлены выходные данные от стандартного выходного потока.

System_CAPS_pubpropertySystem_CAPS_staticKeyAvailable

Возвращает или задает значение, указывающее, доступно ли нажатие клавиши во входном потоке.

System_CAPS_pubpropertySystem_CAPS_staticLargestWindowHeight

Возвращает максимальное число строк окна консоли с учетом текущего шрифта и разрешения экрана.

System_CAPS_pubpropertySystem_CAPS_staticLargestWindowWidth

Возвращает максимальное число столбцов окна консоли с учетом текущего шрифта и разрешения экрана.

System_CAPS_pubpropertySystem_CAPS_staticNumberLock

Возвращает значение, указывающее, включен или отключен режим NUM LOCK клавиатуры.

System_CAPS_pubpropertySystem_CAPS_staticOut

Возвращает стандартный выходной поток.

System_CAPS_pubpropertySystem_CAPS_staticOutputEncoding

Получает или задает кодировку консоли, используемую при записи выходных данных.

System_CAPS_pubpropertySystem_CAPS_staticTitle

Возвращает или задает заголовок для отображения в строке заголовка консоли.

System_CAPS_pubpropertySystem_CAPS_staticTreatControlCAsInput

Получает или задает значение, указывающее, интерпретируется ли комбинация клавиши-модификатора Control и клавиши консоли C (Ctrl+C) как обычный ввод или как прерывание, которое обрабатывается операционной системой.

System_CAPS_pubpropertySystem_CAPS_staticWindowHeight

Возвращает или задает высоту области окна консоли.

System_CAPS_pubpropertySystem_CAPS_staticWindowLeft

Возвращает или задает позицию левого края области окна консоли относительно буфера экрана.

System_CAPS_pubpropertySystem_CAPS_staticWindowTop

Возвращает или задает позицию верхнего края области окна консоли относительно буфера экрана.

System_CAPS_pubpropertySystem_CAPS_staticWindowWidth

Возвращает или задает ширину окна консоли.

ИмяОписание
System_CAPS_pubmethodSystem_CAPS_staticBeep()

Воспроизводит звуковой сигнал через динамик консоли.

System_CAPS_pubmethodSystem_CAPS_staticBeep(Int32, Int32)

Воспроизводит звуковой сигнал заданной частоты и длительности через динамик консоли.

System_CAPS_pubmethodSystem_CAPS_staticClear()

Удаляет из буфера консоли и ее окна отображаемую информацию.

System_CAPS_pubmethodSystem_CAPS_staticMoveBufferArea(Int32, Int32, Int32, Int32, Int32, Int32)

Копирует заданную исходную область буфера экрана в заданную область назначения.

System_CAPS_pubmethodSystem_CAPS_staticMoveBufferArea(Int32, Int32, Int32, Int32, Int32, Int32, Char, ConsoleColor, ConsoleColor)

Копирует заданную исходную область буфера экрана в заданную область назначения.

System_CAPS_pubmethodSystem_CAPS_staticOpenStandardError()

Получает стандартный поток сообщений об ошибках.

System_CAPS_pubmethodSystem_CAPS_staticOpenStandardError(Int32)

Получает стандартный поток сообщений об ошибках, для которого установлен заданный размер буфера.

System_CAPS_pubmethodSystem_CAPS_staticOpenStandardInput()

Получает стандартный входной поток.

System_CAPS_pubmethodSystem_CAPS_staticOpenStandardInput(Int32)

Получает стандартный входной поток, для которого установлен заданный размер буфера.

System_CAPS_pubmethodSystem_CAPS_staticOpenStandardOutput()

Получает стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticOpenStandardOutput(Int32)

Получает стандартный выходной поток, для которого установлен заданный размер буфера.

System_CAPS_pubmethodSystem_CAPS_staticRead()

Читает следующий символ из стандартного входного потока.

System_CAPS_pubmethodSystem_CAPS_staticReadKey()

Получает следующий нажатый пользователем символ или функциональную клавишу. Нажатая клавиша отображается в окне консоли.

System_CAPS_pubmethodSystem_CAPS_staticReadKey(Boolean)

Получает следующий нажатый пользователем символ или функциональную клавишу. Нажатая клавиша может быть отображена в окне консоли.

System_CAPS_pubmethodSystem_CAPS_staticReadLine()

Считывает следующую строку символов из стандартного входного потока.

System_CAPS_pubmethodSystem_CAPS_staticResetColor()

Устанавливает для цветов фона и текста консоли их значения по умолчанию.

System_CAPS_pubmethodSystem_CAPS_staticSetBufferSize(Int32, Int32)

Устанавливает заданные значения высоты и ширины буферной области экрана.

System_CAPS_pubmethodSystem_CAPS_staticSetCursorPosition(Int32, Int32)

Устанавливает положение курсора.

System_CAPS_pubmethodSystem_CAPS_staticSetError(TextWriter)

Присваивает свойству Error указанный объект TextWriter.

System_CAPS_pubmethodSystem_CAPS_staticSetIn(TextReader)

Присваивает свойству In указанный объект TextReader.

System_CAPS_pubmethodSystem_CAPS_staticSetOut(TextWriter)

Присваивает свойству Out указанный объект TextWriter.

System_CAPS_pubmethodSystem_CAPS_staticSetWindowPosition(Int32, Int32)

Задает позицию окна консоли относительно буфера экрана.

System_CAPS_pubmethodSystem_CAPS_staticSetWindowSize(Int32, Int32)

Устанавливает заданные значения высоты и ширины окна консоли.

System_CAPS_pubmethodSystem_CAPS_staticWrite(Boolean)

Записывает текстовое представление заданного логического значения в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWrite(Char)

Записывает значение заданного знака Юникода в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWrite(Char[])

Записывает заданный массив знаков Юникода в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWrite(Char[], Int32, Int32)

Записывает заданный дочерний массив знаков Юникода в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWrite(Decimal)

Записывает текстовое представление заданного значения Decimal в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWrite(Double)

Записывает текстовое представление заданного значения двойной точности с плавающей запятой в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWrite(Int32)

Записывает текстовое представление заданного 32-битового целого числа со знаком в стандартный поток вывода.

System_CAPS_pubmethodSystem_CAPS_staticWrite(Int64)

Записывает текстовое представление заданного 64-битового целого числа со знаком в стандартный поток вывода.

System_CAPS_pubmethodSystem_CAPS_staticWrite(Object)

Записывает текстовое представление заданного объекта в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWrite(Single)

Записывает текстовое представление заданного значения одинарной точности с плавающей запятой в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWrite(String)

Записывает заданное строковое значение в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWrite(String, Object)

Записывает текстовое представление заданного объекта в стандартный выходной поток, используя заданные сведения о форматировании.

System_CAPS_pubmethodSystem_CAPS_staticWrite(String, Object, Object)

Записывает текстовые представления заданных объектов в стандартный выходной поток, используя заданные сведения о форматировании.

System_CAPS_pubmethodSystem_CAPS_staticWrite(String, Object, Object, Object)

Записывает текстовые представления заданных объектов в стандартный выходной поток, используя заданные сведения о форматировании.

System_CAPS_pubmethodSystem_CAPS_staticWrite(String, Object, Object, Object, Object)

Записывает текстовое представление заданных объектов и список параметров переменной длины в стандартный выходной поток, используя заданные сведения о форматировании.

System_CAPS_pubmethodSystem_CAPS_staticWrite(String, Object[])

Записывает текстовое представление заданного массива объектов в стандартный выходной поток, используя заданные сведения о форматировании.

System_CAPS_pubmethodSystem_CAPS_staticWrite(UInt32)

Записывает текстовое представление заданного 32-битового целого числа без знака в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWrite(UInt64)

Записывает текстовое представление заданного 64-битового целого числа без знака в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine()

Записывает текущий признак конца строки в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Boolean)

Записывает текстовое представление заданного логического значения с текущим признаком конца строки в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Char)

Записывает заданный знак Юникода, за которым следует текущий признак конца строки, в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Char[])

Записывает заданный массив знаков Юникода, за которым следует текущий признак конца строки, в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Char[], Int32, Int32)

Записывает заданный подмассив знаков Юникода, за которым следует текущий признак конца строки, в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Decimal)

Записывает текстовое представление указанного значения Decimal, за которым следует текущий знак завершения строки, в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Double)

Записывает текстовое представление заданного значения двойной точности с плавающей запятой, за которым следует признак конца строки, в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Int32)

Записывает текстовое представление заданного 32-битового целого числа со знаком, за которым следует текущий знак завершения строки, в стандартный поток вывода.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Int64)

Записывает текстовое представление заданного 64-битового целого числа со знаком, за которым следует текущий знак завершения строки, в стандартный поток вывода.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Object)

Записывает текстовое представление заданного объекта, за которым следует текущий признак конца строки, в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Single)

Записывает текстовое представление заданного значения одинарной точности с плавающей запятой, за которым следует признак конца строки, в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(String)

Записывает заданное строковое значение, за которым следует текущий признак конца строки, в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(String, Object)

Записывает текстовое представление заданного объекта, за которым следует текущий признак конца строки, в стандартный выходной поток с использованием заданных сведений о форматировании.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(String, Object, Object)

Записывает текстовые представления заданных объектов, за которыми следует текущий признак конца строки, в стандартный выходной поток с использованием заданных сведений о форматировании.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(String, Object, Object, Object)

Записывает текстовые представления заданных объектов, за которыми следует текущий признак конца строки, в стандартный выходной поток с использованием заданных сведений о форматировании.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(String, Object, Object, Object, Object)

Записывает текстовые представления заданных объектов и список параметров переменной длины, за которыми следует текущий признак конца строки, в стандартный выходной поток с использованием заданных сведений о форматировании.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(String, Object[])

Записывает текстовые представления заданного массива объектов, за которым следует текущий признак конца строки, в стандартный выходной поток с использованием заданных сведений о форматировании.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(UInt32)

Записывает текстовое представление заданного 32-битового целого числа без знака, за которым следует текущий признак конца строки, в стандартный выходной поток.

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(UInt64)

Записывает текстовое представление заданного 64-битового целого числа без знака, за которым следует текущий признак конца строки, в стандартный выходной поток.

ИмяОписание
System_CAPS_pubeventSystem_CAPS_staticCancelKeyPress

Возникает при одновременном нажатии клавиши-модификатора Control (Ctrl) и либо клавиши консоли ConsoleKey.C (C), либо клавиши Break (Ctrl+C или Ctrl+Break).

System_CAPS_noteПримечание

Исходный код .NET Framework для этого типа см. в разделе Reference Source. Выполнять поиск исходного кода в Интернете, справочник для автономной работы и пошагово источники (включая исправления и обновления) во время отладки; see instructions.

Консоль является окном операционной системы, в котором пользователи взаимодействуют с операционной системой или с помощью текстовых консольного приложения путем набора текстового ввода с клавиатуры и чтения текстового вывода с экрана компьютера. Например в операционной системе Windows консоль называется окно командной строки и принимает команды MS-DOS. Console Класс обеспечивает базовую поддержку для приложений, чтение знаков из и записи их на консоль.

Дополнительные сведения о разработке с помощью Console класса, в следующих разделах:

При запуске консольного приложения, операционная система автоматически связывает три потока ввода-вывода с помощью консоли: стандартный входной поток, в стандартный выходной поток и в стандартный поток вывода ошибок. Приложение может считывать пользовательский ввод из стандартного входного потока; Запишите данные в стандартный выходной поток; и запись данных об ошибках в стандартный поток вывода ошибок. Эти потоки представлены в приложении в качестве значения Console.In, Console.Out, и Console.Error свойства.

По умолчанию значение In свойство System.IO.TextReader , представляющий клавиатуры и значения Out и Error свойства System.IO.TextWriter объекты, представляющие окна консоли. Тем не менее эти свойства можно задать в потоки, которые не представляют окна консоли или клавиатуры; Например эти свойства можно задать в потоки, которые представляют файлы. Чтобы перенаправить стандартный ввод, стандартный вывод или стандартный поток ошибок, вызовите Console.SetIn, Console.SetOut, или Console.SetError метода, соответственно. Операции ввода-вывода, которые используют эти потоки синхронизируются, что означает, что несколько потоков чтения или записи данных в потоки. Это означает, что методы, которые обычно асинхронно, такие как TextReader.ReadLineAsync, выполняются синхронно, если объект представляет поток консоли.

System_CAPS_noteПримечание

Не используйте Console класса для отображения вывода в автоматической установки приложений, таких как сервер приложений. Вызовы методов, например Console.Write и Console.WriteLine не оказывают влияния в приложений графического пользовательского интерфейса.

Consoleчлены класса, которые нормально работать при основной поток направляется на консоль может создания исключения, если поток перенаправлен, например, в файл. В приложениях для перехвата System.IO.IOException исключения, если можно перенаправлять стандартный поток. Можно также использовать IsOutputRedirected, IsInputRedirected, и IsErrorRedirected свойства, чтобы определить, перенаправляется ли перед выполнением операции, которая создает стандартный поток System.IO.IOException исключение.

Иногда бывает удобно для явного вызова членов объектов потока, представленный In, Out, и Error свойства. Например, по умолчанию Console.ReadLine метод считывает входные данные из стандартного входного потока. Аналогичным образом Console.WriteLine метод записывает данные в стандартный выходной поток данных следуют строки по умолчанию завершения, который является символом возврата каретки и перевода строки («\r\n»). Тем не менее Console класс не предоставляет соответствующего метода для записи данных в стандартный выходной поток ошибок или свойства для изменения признака конца строки для данных, записанных в поток.

Эти проблемы можно устранить, установив TextWriter.NewLine свойство Out или Error свойства другого признака конца строки. Например следующая инструкция C# устанавливает завершения строки, в стандартный выходной поток ошибок для двух символы возврата каретки и перевода последовательности строки:

Console.Error.NewLine = "\r\n\r\n";

Затем можно явным образом вызвать WriteLine метод объекта error выходной поток, как в следующей инструкции C#:

Console.Error.WriteLine();

Два тесно связанных функций консоли являются буфер экрана и окно консоли. Текст фактически считывается или записывается в потоки, принадлежащие консоли, но могут быть чтение и запись данных в область, принадлежащие консоли, называемой буфера экрана. Буфер экрана является атрибутом консоли и организованы в виде прямоугольной сетки строк и столбцов, где каждый пересечения сетки или символьной ячейке содержит один символ. Каждый символ имеет собственный цвет, а каждая ячейка символ имеет собственный цвет фона.

Буфера экрана просматривается через прямоугольную область, называемую в окне консоли. В окне консоли является еще одним атрибутом консоли; Это не сама консоль, которая является окном операционной системы. В окне консоли организованы в строки и столбцы, меньше или равен размеру буфера экрана и могут выполняться в виде буфера экрана. Если буфер экрана больше, чем в окне консоли, автоматически отображаются полосы прокрутки, в окне консоли может быть перемещен за буферной области экрана.

Курсор указывает позицию буфера экрана, где в настоящее время чтения или записи текста. Курсор можно скрывать или делать видимыми, а его высота можно изменить. Если курсор видим, положение окна консоли перемещается автоматически, чтобы он всегда в представлении.

Точку отсчета для координаты ячейки символов в буфере экрана является верхний левый угол и положение курсора и окна консоли измеряется относительно этого начала координат. Отсчитываемый от нуля индексов используйте для указания позиции; Таким образом можно определить самая верхняя строка как строки и крайний слева столбец как столбец 0. Максимальное значение для индексы строки и столбца — Int16.MaxValue.

В общем случае консоль считывает входные данные и записывает выходные данные с помощью текущей кодовой странице консоли, который определяет язык системы по умолчанию. Кодовая страница может обрабатывать только подмножество доступных символов Юникода, поэтому при попытке отображения символов, которые не сопоставлены с конкретной кодовой страницы, консоль не будет возможность отобразить все символы или неточно представлять. Приведенный ниже пример иллюстрирует данную проблему. Он пытается отображать символы кириллицы алфавита от U + 0410 U + 044F на консоль. При запуске примера в системе, которая использует консоль кодовую страницу 437 каждый символ заменяется знак вопроса (?), так как символы в кодовой странице 437 не сопоставляются символы кириллицы.

using System;

public class Example
{
   public static void Main()
   {
      // Create a Char array for the modern Cyrillic alphabet, 
      // from U+0410 to U+044F.
      int nChars = 0x044F - 0x0410 + 1;
      char[] chars = new char[nChars];
      ushort codePoint = 0x0410;
      for (int ctr = 0; ctr < chars.Length; ctr++) {
        chars[ctr] = Convert.ToChar(codePoint);
        codePoint++;
      }   

      Console.WriteLine("Current code page: {0}\n", 
                        Console.OutputEncoding.CodePage);
      // Display the characters.
      foreach (var ch in chars) {
         Console.Write("{0}  ", ch);
         if (Console.CursorLeft >= 70) 
            Console.WriteLine();
      }
   }
}
// The example displays the following output:
//    Current code page: 437
//    
//    ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?
//    ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?
//    ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?

Помимо поддержки кодовых страниц, Console с кодировкой UTF-8 поддерживает класс UTF8Encoding класса. Начиная с .NET Framework 4.5 Console класс также поддерживает с кодировкой UTF-16 UnicodeEncoding класса. Для отображения символов Юникода в консоль. задать OutputEncoding значение UTF8Encoding или UnicodeEncoding.

Поддержка символов Юникода требует кодировщик распознавать определенный символ Юникода, а также требует шрифта с глифы, необходимые для подготовки к просмотру этим символом. Чтобы успешно отобразить символов Юникода в консоль, шрифта консоли должно быть присвоено не растровых или как Consolas в качестве используемого или Lucida Console шрифтом TrueType. В следующем примере показано, как можно программно изменить шрифт из растровый шрифт для Lucida Console.

using System;
using System.Runtime.InteropServices;

public class Example
{
   [DllImport("kernel32.dll", SetLastError = true)]
   static extern IntPtr GetStdHandle(int nStdHandle);

   [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
   static extern bool GetCurrentConsoleFontEx(
          IntPtr consoleOutput, 
          bool maximumWindow,
          ref CONSOLE_FONT_INFO_EX lpConsoleCurrentFontEx);

   [DllImport("kernel32.dll", SetLastError = true)]
   static extern bool SetCurrentConsoleFontEx(
          IntPtr consoleOutput, 
          bool maximumWindow,
          CONSOLE_FONT_INFO_EX consoleCurrentFontEx);

   private const int STD_OUTPUT_HANDLE = -11;
   private const int TMPF_TRUETYPE = 4;
   private const int LF_FACESIZE = 32;
   private static IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);

   public static unsafe void Main()
   {
      string fontName = "Lucida Console";
      IntPtr hnd = GetStdHandle(STD_OUTPUT_HANDLE);
      if (hnd != INVALID_HANDLE_VALUE) {
         CONSOLE_FONT_INFO_EX info = new CONSOLE_FONT_INFO_EX();
         info.cbSize = (uint) Marshal.SizeOf(info);
         bool tt = false;
         // First determine whether there's already a TrueType font.
         if (GetCurrentConsoleFontEx(hnd, false, ref info)) {
            tt = (info.FontFamily & TMPF_TRUETYPE) == TMPF_TRUETYPE;
            if (tt) {
               Console.WriteLine("The console already is using a TrueType font.");
               return;
            }
            // Set console font to Lucida Console.
            CONSOLE_FONT_INFO_EX newInfo = new CONSOLE_FONT_INFO_EX();
            newInfo.cbSize = (uint) Marshal.SizeOf(newInfo);          
            newInfo.FontFamily = TMPF_TRUETYPE;
            IntPtr ptr = new IntPtr(newInfo.FaceName);
            Marshal.Copy(fontName.ToCharArray(), 0, ptr, fontName.Length);
            // Get some settings from current font.
            newInfo.dwFontSize = new COORD(info.dwFontSize.X, info.dwFontSize.Y);
            newInfo.FontWeight = info.FontWeight;
            SetCurrentConsoleFontEx(hnd, false, newInfo);
         }
      }    
    }

   [StructLayout(LayoutKind.Sequential)]
   internal struct COORD
   {
      internal short X;
      internal short Y;

      internal COORD(short x, short y)
      {
         X = x;
         Y = y;
      }
   }

   [StructLayout(LayoutKind.Sequential)]
   internal unsafe struct CONSOLE_FONT_INFO_EX 
   {
      internal uint cbSize;
      internal uint nFont;
      internal COORD dwFontSize;
      internal int FontFamily;
      internal int FontWeight;
      internal fixed char FaceName[LF_FACESIZE];
   } 
}

Тем не менее шрифты TrueType можно отобразить только подмножество глифов. Например шрифт Lucida Console отображает только 643 из примерно 64 000 доступны символы от U + 0021 до U + FB02. Чтобы увидеть, что символы определенного шрифта поддерживает, откройте шрифты панели управления выберите поиска символа и выберите шрифт, чьи кодировки, вы хотите подробно шрифта список символов окна.

Windows использует связь шрифтов для отображения глифов, которые недоступны в определенном шрифте. Сведения о связь, чтобы отобразить дополнительные наборы знаков шрифтов, в разделе Globalization Step-by-Step: Fonts. В подразделе реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink определяются связанных шрифтов. Каждый элемент, связанный с этого подраздела соответствует имени базового шрифта и его значение — массив строк, определяющий файлы шрифтов и шрифты, которые связаны с базового шрифта. Каждый элемент массива определяет связанный шрифта и принимает форму файл шрифт,имя шрифта. В следующем примере показано, как программным образом можно определить связанный шрифта SimSun найден в файле шрифта simsun.ttc, отображающий упрощенный Хан символов с именем.

using Microsoft.Win32;
using System;

public class Example
{
   public static void Main()
   {
      string valueName = "Lucida Console";
      string newFont = "simsun.ttc,SimSun";
      string[] fonts = null;
      RegistryValueKind kind = 0; 
      bool toAdd;

      RegistryKey key = Registry.LocalMachine.OpenSubKey( 
                 @"Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink", 
                 true);
      if (key == null) {
         Console.WriteLine("Font linking is not enabled.");
      }
      else {
         // Determine if the font is a base font.
         string[] names = key.GetValueNames();
         if (Array.Exists(names, s => s.Equals(valueName, 
                                      StringComparison.OrdinalIgnoreCase))) {
            // Get the value's type.
            kind = key.GetValueKind(valueName);

            // Type should be RegistryValueKind.MultiString, but we can't be sure.
            switch (kind) {
               case RegistryValueKind.String:
                  fonts = new string[] { (string) key.GetValue(valueName) };
                  break;   
               case RegistryValueKind.MultiString:
                  fonts = (string[]) key.GetValue(valueName);
                  break;
               case RegistryValueKind.None:
                  // Do nothing.
                  fonts = new string[] { };
                  break;
            } 
            // Determine whether SimSun is a linked font.
            if (Array.FindIndex(fonts, s =>s.IndexOf("SimSun", 
                                       StringComparison.OrdinalIgnoreCase) >=0) >= 0) {
               Console.WriteLine("Font is already linked.");
               toAdd = false;
            }
            else {
               // Font is not a linked font.
               toAdd = true;
            }
         }
         else {
            // Font is not a base font.
            toAdd = true;
            fonts = new string[] { };
         }

         if (toAdd) {  
            Array.Resize(ref fonts, fonts.Length + 1);
            fonts[fonts.GetUpperBound(0)] = newFont;
            // Change REG_SZ to REG_MULTI_SZ.
            if (kind == RegistryValueKind.String)
               key.DeleteValue(valueName, false);

            key.SetValue(valueName, fonts, RegistryValueKind.MultiString);
            Console.WriteLine("SimSun added to the list of linked fonts.");
         }                     
      }

      if (key != null) key.Close();
   }
}

Поддержка Юникода для консоли имеет следующие ограничения:

  • Кодировка UTF-32, не поддерживается. Поддерживаются только Юникод, кодировки UTF-8 и UTF-16, представляются UTF8Encoding и UnicodeEncoding классов, соответственно.

  • Двунаправленный вывода не поддерживается.

  • Отображение символов вне основное многоязычное поле (т. е суррогатных пар) не поддерживается, даже если они определены в файле связанных шрифтов.

  • Отображение символов в сложных сценариях не поддерживается.

  • Объединение последовательностей символов (то есть символы, состоящие из базового символа и одного или более несамостоятельных знаков) отображаются в виде отдельных символов. Чтобы обойти это ограничение, вы можете нормализовать строка, отображаемая, вызвав String.Normalize метод перед отправкой вывод на консоль. В следующем примере строка, содержащая символ объединения последовательности 0061 U + U + 0308 выводится на консоль, как два символа, прежде чем выходную строку нормализован и как один символ после String.Normalize вызывается метод.

    using System;
    using System.IO;
    
    public class Example
    {
       public static void Main()
       {
          char[] chars = { '\u0061', '\u0308' };
    
          string combining = new String(chars);
          Console.WriteLine(combining);
    
          combining = combining.Normalize();
          Console.WriteLine(combining);
       }
    }
    // The example displays the following output:
    //       a"
    //       ä
    

    Обратите внимание, что нормализации хорошим решением только в том случае, если последовательность символов в стандарте для составными форму, которая соответствует конкретным combining содержит символ Юникода.

  • Если шрифт обеспечивает глиф кодовой точки в частной области, будет отображаться Этот глиф. Тем не менее поскольку символы в поле частным зависят от приложения, это может оказаться ожидаемый глифа.

Следующий пример отображает диапазон знаков Юникода, в консоли. Пример принимает три параметра командной строки: начало диапазона для отображения конца диапазона для отображения и следует ли применять кодирование текущей консоли (false) или кодировку UTF-16 (true). Предполагается, что консоль использует является шрифтом TrueType.

using System;
using System.IO;
using System.Globalization;
using System.Text;

public static class DisplayChars
{
   private static void Main(string[] args)
   {
      uint rangeStart = 0;
      uint rangeEnd = 0;
      bool setOutputEncodingToUnicode = true;
      // Get the current encoding so we can restore it.
      Encoding originalOutputEncoding = Console.OutputEncoding;

   	try
   	{
         switch(args.Length)
         {
            case 2:
               rangeStart = uint.Parse(args[0], NumberStyles.HexNumber);
               rangeEnd = uint.Parse(args[1], NumberStyles.HexNumber);
               setOutputEncodingToUnicode = true;
               break;
            case 3:
               if (! uint.TryParse(args[0], NumberStyles.HexNumber, null, out rangeStart))
                  throw new ArgumentException(String.Format("{0} is not a valid hexadecimal number.", args[0]));

               if (!uint.TryParse(args[1], NumberStyles.HexNumber, null, out rangeEnd))
                  throw new ArgumentException(String.Format("{0} is not a valid hexadecimal number.", args[1]));

               bool.TryParse(args[2], out setOutputEncodingToUnicode);
               break;
            default:
               Console.WriteLine("Usage: {0} <{1}> <{2}> [{3}]", 
                                 Environment.GetCommandLineArgs()[0], 
                                 "startingCodePointInHex", 
                                 "endingCodePointInHex", 
                                 "<setOutputEncodingToUnicode?{true|false, default:false}>");
               return;
         }

         if (setOutputEncodingToUnicode) {
            // This won't work before .NET Framework 4.5.
            try {
               // Set encoding using endianness of this system.
               // We're interested in displaying individual Char objects, so 
               // we don't want a Unicode BOM or exceptions to be thrown on
               // invalid Char values.
               Console.OutputEncoding = new UnicodeEncoding(! BitConverter.IsLittleEndian, false); 
               Console.WriteLine("\nOutput encoding set to UTF-16");
            }
            catch (IOException) {
               Console.OutputEncoding = new UTF8Encoding();
               Console.WriteLine("Output encoding set to UTF-8");
            }
         }
         else {
            Console.WriteLine("The console encoding is {0} (code page {1})", 
                              Console.OutputEncoding.EncodingName,
                              Console.OutputEncoding.CodePage);
         }
         DisplayRange(rangeStart, rangeEnd);
      }
      catch (ArgumentException ex) {
         Console.WriteLine(ex.Message);
      }
      finally {
         // Restore console environment.
         Console.OutputEncoding = originalOutputEncoding;
      }
   }

   public static void DisplayRange(uint start, uint end)
   {
      const uint upperRange = 0x10FFFF;
      const uint surrogateStart = 0xD800;
      const uint surrogateEnd = 0xDFFF;

      if (end <= start) {
         uint t = start;
         start = end;
         end = t;
      }

      // Check whether the start or end range is outside of last plane.
      if (start > upperRange)
         throw new ArgumentException(String.Format("0x{0:X5} is outside the upper range of Unicode code points (0x{1:X5})",
                                                   start, upperRange));                                   
      if (end > upperRange)
         throw new ArgumentException(String.Format("0x{0:X5} is outside the upper range of Unicode code points (0x{0:X5})",
                                                   end, upperRange));

      // Since we're using 21-bit code points, we can't use U+D800 to U+DFFF.
      if ((start < surrogateStart & end > surrogateStart) || (start >= surrogateStart & start <= surrogateEnd ))
         throw new ArgumentException(String.Format("0x{0:X5}-0x{1:X5} includes the surrogate pair range 0x{2:X5}-0x{3:X5}", 
                                                   start, end, surrogateStart, surrogateEnd));         
      uint last = RoundUpToMultipleOf(0x10, end);
      uint first = RoundDownToMultipleOf(0x10, start);

      uint rows = (last - first) / 0x10;

      for (uint r = 0; r < rows; ++r) {
         // Display the row header.
         Console.Write("{0:x5} ", first + 0x10 * r);

         for (uint c = 0; c < 0x10; ++c) {
            uint cur = (first + 0x10 * r + c);
            if (cur  < start) {
               Console.Write(" {0} ", Convert.ToChar(0x20));
            }
            else if (end < cur) {
               Console.Write(" {0} ", Convert.ToChar(0x20));
            }
            else {
               // the cast to int is safe, since we know that val <= upperRange.
               String chars = Char.ConvertFromUtf32( (int) cur);
               // Display a space for code points that are not valid characters.
               if (CharUnicodeInfo.GetUnicodeCategory(chars[0]) == 
                                               UnicodeCategory.OtherNotAssigned)
                  Console.Write(" {0} ", Convert.ToChar(0x20));
               // Display a space for code points in the private use area.
               else if (CharUnicodeInfo.GetUnicodeCategory(chars[0]) ==
                                              UnicodeCategory.PrivateUse)
                 Console.Write(" {0} ", Convert.ToChar(0x20));
               // Is surrogate pair a valid character?
               // Note that the console will interpret the high and low surrogate
               // as separate (and unrecognizable) characters.
               else if (chars.Length > 1 && CharUnicodeInfo.GetUnicodeCategory(chars, 0) == 
                                            UnicodeCategory.OtherNotAssigned)
                  Console.Write(" {0} ", Convert.ToChar(0x20));
               else
                  Console.Write(" {0} ", chars); 
            }

            switch (c) {
               case 3: case 11:
                  Console.Write("-");
                  break;
               case 7:
                  Console.Write("--");
                  break;
            }
         }

         Console.WriteLine();
         if (0 < r && r % 0x10 == 0)
            Console.WriteLine();
      }
   }

   private static uint RoundUpToMultipleOf(uint b, uint u)
   {
      return RoundDownToMultipleOf(b, u) + b;
   }

   private static uint RoundDownToMultipleOf(uint b, uint u)
   {
      return u - (u % b);
   }
}
// If the example is run with the command line
//       DisplayChars 0400 04FF true
// the example displays the Cyrillic character set as follows:
//       Output encoding set to UTF-16
//       00400  Ѐ  Ё  Ђ  Ѓ - Є  Ѕ  І  Ї -- Ј  Љ  Њ  Ћ - Ќ  Ѝ  Ў  Џ
//       00410  А  Б  В  Г - Д  Е  Ж  З -- И  Й  К  Л - М  Н  О  П
//       00420  Р  С  Т  У - Ф  Х  Ц  Ч -- Ш  Щ  Ъ  Ы - Ь  Э  Ю  Я
//       00430  а  б  в  г - д  е  ж  з -- и  й  к  л - м  н  о  п
//       00440  р  с  т  у - ф  х  ц  ч -- ш  щ  ъ  ы - ь  э  ю  я
//       00450  ѐ  ё  ђ  ѓ - є  ѕ  і  ї -- ј  љ  њ  ћ - ќ  ѝ  ў  џ
//       00460  Ѡ  ѡ  Ѣ  ѣ - Ѥ  ѥ  Ѧ  ѧ -- Ѩ  ѩ  Ѫ  ѫ - Ѭ  ѭ  Ѯ  ѯ
//       00470  Ѱ  ѱ  Ѳ  ѳ - Ѵ  ѵ  Ѷ  ѷ -- Ѹ  ѹ  Ѻ  ѻ - Ѽ  ѽ  Ѿ  ѿ
//       00480  Ҁ  ҁ  ҂  ҃ - ҄  ҅  ҆  ҇ -- ҈  ҉  Ҋ  ҋ - Ҍ  ҍ  Ҏ  ҏ
//       00490  Ґ  ґ  Ғ  ғ - Ҕ  ҕ  Җ  җ -- Ҙ  ҙ  Қ  қ - Ҝ  ҝ  Ҟ  ҟ
//       004a0  Ҡ  ҡ  Ң  ң - Ҥ  ҥ  Ҧ  ҧ -- Ҩ  ҩ  Ҫ  ҫ - Ҭ  ҭ  Ү  ү
//       004b0  Ұ  ұ  Ҳ  ҳ - Ҵ  ҵ  Ҷ  ҷ -- Ҹ  ҹ  Һ  һ - Ҽ  ҽ  Ҿ  ҿ
//       004c0  Ӏ  Ӂ  ӂ  Ӄ - ӄ  Ӆ  ӆ  Ӈ -- ӈ  Ӊ  ӊ  Ӌ - ӌ  Ӎ  ӎ  ӏ
//       004d0  Ӑ  ӑ  Ӓ  ӓ - Ӕ  ӕ  Ӗ  ӗ -- Ә  ә  Ӛ  ӛ - Ӝ  ӝ  Ӟ  ӟ
//       004e0  Ӡ  ӡ  Ӣ  ӣ - Ӥ  ӥ  Ӧ  ӧ -- Ө  ө  Ӫ  ӫ - Ӭ  ӭ  Ӯ  ӯ
//       004f0  Ӱ  ӱ  Ӳ  ӳ - Ӵ  ӵ  Ӷ  ӷ -- Ӹ  ӹ  Ӻ  ӻ - Ӽ  ӽ  Ӿ  ӿ

Console Класс содержит следующие методы для записи выходных данных консоли и чтения ввод данных на консоли:

  • Перегруженные версии ReadKey метод считывать отдельному символу.

  • ReadLine Метод считывает строку входных данных.

  • Write Перегрузки метода преобразования экземпляра типа значения, массив символов или набор объектов в форматированном или неформатированном виде строку и затем написать эту строку на консоль.

  • Набор параллельного WriteLine выходные данные, то строка как перегрузки метода Write перегрузки метода, но также добавить признака конца строки.

Console Класс также содержит методы и свойства для выполнения следующих операций:

  • Возвращает или задает размер буфера экрана. BufferHeight И BufferWidth свойства позволяют получить или задать буфера высоты и ширины, соответственно и SetBufferSize позволяет задать размер буфера в одном вызове метода.

  • Возвращает или задает размер окна консоли. WindowHeight И WindowWidth свойства позволяют получить или задать ширину и высоту окна соответственно и SetWindowSize метод позволяет задать минимальный размер окна в одном вызове метода.

  • Возвращает или задает размер курсора. CursorSize Указывает высоту курсора в символьной ячейке.

  • Возвращает или задает позицию окна консоли относительно буфера экрана. WindowTop И WindowLeft свойства позволяют получить или задать верхняя строка и крайний слева столбец буфера экрана, который отображается в окне консоли, и SetWindowPosition метод позволяет задавать эти значения в одном вызове метода.

  • Возвращает или задает положение курсора путем получения или установки CursorTop и CursorLeft свойства или набора позицию курсора путем вызова SetCursorPosition метод.

  • Переместить или удалить данные в буфере экрана путем вызова MoveBufferArea или Clear метод.

  • Получить или задать цвета фона и текста с помощью ForegroundColor и BackgroundColor свойства, или восстановить их по умолчанию цвета фона и переднего плана путем вызова ResetColor метод.

  • Воспроизвести звуковой сигнал через динамик консоли вызывая Beep метод.

В платформе .NET Framework, на рабочем столе Console класс использует кодировку, возвращенных GetConsoleCP и GetConsoleOutputCP, который обычно является кодовой страницы кодировки. Например, в системах с языком и региональными параметрами является английский (США), кодовую страницу 437 приведен кодировку, используемую по умолчанию. Тем не менее .NET Core может сделать доступными только ограниченный набор кодировок. Если это так, Encoding.UTF8 используется в качестве кодировки по умолчанию для консоли.

Если приложение зависит от конкретного кода кодировок страниц, вы по-прежнему их можно сделать доступными, выполнив указанные ниже перед вызова любых Console методов:

  1. Добавьте ссылку на сборку System.Text.Encoding.CodePages.dll в проект.

  2. Получить EncodingProvider объекта из CodePagesEncodingProvider.Instance свойство.

  3. Передайте EncodingProvider объект Encoding.RegisterProvider метод для установки дополнительных кодировок, поддерживаемых поставщиком кодировки доступен.

Console Класса будет автоматически использовать кодировку системы по умолчанию вместо UTF-8, при условии, что вы зарегистрировали кодировки поставщика перед вызовом любого Console методов вывода.

Следующий пример демонстрирует считывания данных и записи данных в стандартных входных и выходных потоков. Обратите внимание, что эти потоки можно перенаправить с помощью SetIn и SetOut методы.

using System;

public class Example {
    public static void Main() 
    {
        Console.Write("Hello ");
        Console.WriteLine("World!");
        Console.Write("Enter your name: ");
        String name = Console.ReadLine();
        Console.Write("Good day, ");
        Console.Write(name);
        Console.WriteLine("!");
    }
}
// The example displays output similar to the following:
//       Hello World!
//       Enter your name: James
//       Good day, James!

.NET Framework
Доступно с 1.1
Silverlight
Доступно с 2.0
Windows Phone Silverlight
Доступно с 7.0

Данный тип потокобезопасен.

Вернуться в начало
Показ: