Функция GetStdHandle извлекает дескриптор для стандартного ввода данных, стандартного вывода или стандартной ошибки устройства.
DWORD nStdHandle // ввод, вывод или ошибка устройства
[in] Стандартное устройство, для которого дескриптор должен быть возвращен. Этот параметр может быть одним из следующих значений.
Именованная константа
Предназначение
STD_INPUT_HANDLE
Дескриптор стандартного устройства ввода данных. Вначале, это — дескриптор консольного буфера ввода, CONIN $.
STD_OUTPUT_HANDLE
Дескриптор устройства стандартного вывода. Вначале, это — дескриптор активного экранного буфера консоли, CONOUT $.
STD_ERROR_HANDLE
Дескриптор стандартной ошибки устройства. Вначале, это — дескриптор активного экранного буфера консоли, CONOUT $.
Если функция завершается успешно, возвращаемое значение — дескриптор определяемого устройства. Дескриптор имеет права доступа GENERIC_READ и GENERIC_WRITE , если приложение не использовало функцию SetStdHandle , чтобы установить стандартный дескриптор с меньшими правами доступа.
Если функция завершается с ошибкой, возвращаемое значение — флажок INVALID_HANDLE_VALUE . Чтобы получить расширенные данные об ошибках, вызовите функцию GetLastError .
Дескрипторы, возвращенные функцией GetStdHandle, могут быть использованы прикладными программами, которым нужно читают из или записывать в консоль. Когда консоль создана, дескриптором стандартного ввода является дескриптор буфера ввода консоли, а стандартного вывода и обработки стандартной ошибки является дескриптор активного экранного буфера консоли. Эти дескрипторы могут быть использованы функциями ReadFile и WriteFile , или любой из консольных функций, которые обращаются к консольному буферу ввода или экранному буферу (например, функциям ReadConsoleInput , WriteConsole , или GetConsoleScreenBufferInfo ).
Стандартные дескрипторы процесса могут быть переназначен вызовом функции SetStdHandle , в этом случае функция GetStdHandle возвращает переназначенный дескриптор. Если стандартные дескрипторы были переназначены, Вы можете задать значение CONIN $ при вызове к функции CreateFile , чтобы получить дескриптор для буфера ввода консоли. Точно так же Вы можете задать значение CONOUT $, чтобы получить дескриптор для активного экранного буфера консоли.
Для начала работы с консолью необходимо получить ее дескриптор.
Функция получения дескриптора стандартного устройства ввода, вывода или ошибки в зависимости от переданного константного параметра:
HANDLE WINAPI GetStdHandle(__in DWORD nStdHandle);
nStdHandle может принимать значения
- STD_INPUT_HANDLE = -10; // устройство ввода
- STD_OUTPUT_HANDLE = -11; // устройство вывода
- STD_ERROR_HANDLE = -12; // ошибка
Использование русского языка в консоли с помощью API
Для указания кодовой страницы используются функции
- Кодовая страница консоли вывода
BOOL WINAPI SetConsoleOutputCP(UINT wCodePageID); - Кодовая страница консоли ввода
BOOL WINAPI SetConsoleCP(UINT wCodePageID);
где wCodePageID — номер кодовой страницы.
Для перекодировки на русский язык используется кодовая страница wCodePage >.
Для перекодировки русского текста, введенного в Win-коде также может использоваться функция
- lpszSrc – указатель на строку-источник;
- lpszDst/strong> – указатель на строку-приемник
Возвращаемое значение 1 в случае успешной перекодировки.
Чтение/запись данных в консоль/файл
Для чтения и записи данных в консоль используются функции
В случае успешного завершения функции возвращают ненулевое значение.
Аргументы функций
- hFile -дескриптор файла/консоли. Файл/консоль должен иметь доступ для чтения для функции ReadFile() и доступ для записи для функции WriteFile() .
- lpBuffer — указатель на буфер (строку) для чтения/записи данных.
- nNumberOfBytesToWrite — число байтов, которые будут записаны в файл.
- lpNumberOfBytesWritten — указатель на переменную, которая получает число считанных/записанных байтов.
- lpOverlapped — указатель на структуру OVERLAPPED , которая используется в операциях асинхронного ввода-вывода (например, получение данных по интерфейсу связи). Для синхронного ввода-вывода данный указатель имеет значение NULL .
Установка заголовка окна консоли
Функция установки заголовка окна консоли
lpConsoleTitle – указатель на строку имени консоли с завершающим нуль-символом
Установка цвета символов и фона в консоли
Цвет символов и фона задается с помощью констант, определяющих тетрады символов.
Цвет символов
- FOREGROUND_BLUE = 0x01
- FOREGROUND_GREEN = 0x02
- FOREGROUND_RED = 0x04
- FOREGROUND_INTENSITY = 0x08
- BACKGROUND_BLUE = 0x10
- BACKGROUND_GREEN = 0x20
- BACKGROUND_RED = 0x40
- BACKGROUND_INTENSITY = 0x80
Каждая тетрада, определяющая цвет символов или фона, представляет собой значение от 0 до 15, задаваемая логической суммой соответствующих констант:

Например, цвет символов с кодом 13 задается как
FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY .
Функция определения атрибутов вводимых символов в окне консоли
- hConsoleOutput – дескриптор буфера консоли вывода;
- wAttributes – цвет букв и фона, получаемый путем комбинации констант
Функция, задающая цвет фона консоли(путем закрашивания фона отдельных символов)
- hConsoleOutput – дескриптор буфера вывода консоли;
wAttribute – атрибут цвета фона символа в консоли; - nLength – количество ячеек символов, фон которых устанавливается заданным цветом;
- dwWriteCoord – координаты первой закрашиваемой ячейки;
- lpNumberOfAttrsWritten – указатель на идентификатор, в который записывается количество реально закрашенных ячеек.
Для того чтобы изменить цвет всего окна консоли необходимо задать цвет символов, количество которых определяется размером окна консоли. Размер стандартного окна консоли 80×25 = 2000 символов.
Установка позиции курсора
Функция установки позиции курсора в окне консоли
hConsoleOutput – дескриптор буфера вывода консоли;
dwCursorPosition – структура координат COORD, определяющая позицию курсора.
Структура координат представляет собой
Результат выполнения 
Примечание: для корректной компиляции программы необходимо изменить тип кодировки проекта на многобайтовую.
Retrieves a handle to the specified standard device (standard input, standard output, or standard error).
Syntax
Parameters
nStdHandle [in]
The standard device. This parameter can be one of the following values.
| Value | Meaning |
|---|---|
| STD_INPUT_HANDLE (DWORD)-10 | |
| STD_OUTPUT_HANDLE (DWORD)-11 | |
| STD_ERROR_HANDLE (DWORD)-12 |