handle hconsole getstdhandle std output handle

Функция 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.

The standard input device. Initially, this is the console input buffer, CONIN$.

The standard output device. Initially, this is the active console screen buffer, CONOUT$.

The standard error device. Initially, this is the active console screen buffer, CONOUT$.

Return value

If the function succeeds, the return value is a handle to the specified device, or a redirected handle set by a previous call to SetStdHandle. The handle has GENERIC_READ and GENERIC_WRITE access rights, unless the application has used SetStdHandle to set a standard handle with lesser access.

If the function fails, the return value is INVALID_HANDLE_VALUE. To get extended error information, call GetLastError.

If an application does not have associated standard handles, such as a service running on an interactive desktop, and has not redirected them, the return value is NULL.

Remarks

Handles returned by GetStdHandle can be used by applications that need to read from or write to the console. When a console is created, the standard input handle is a handle to the console’s input buffer, and the standard output and standard error handles are handles of the console’s active screen buffer. These handles can be used by the ReadFile and WriteFile functions, or by any of the console functions that access the console input buffer or a screen buffer (for example, the ReadConsoleInput, WriteConsole, or GetConsoleScreenBufferInfo functions).

The standard handles of a process may be redirected by a call to SetStdHandle, in which case GetStdHandle returns the redirected handle. If the standard handles have been redirected, you can specify the CONIN$ value in a call to the CreateFile function to get a handle to a console’s input buffer. Similarly, you can specify the CONOUT$ value to get a handle to a console’s active screen buffer.

Attach/detach behavior

When attaching to a new console, standard handles are always replaced with console handles unless STARTF_USESTDHANDLES was specified during process creation.

If the existing value of the standard handle is NULL, or the existing value of the standard handle looks like a console pseudohandle, the handle is replaced with a console handle.

When a parent uses both CREATE_NEW_CONSOLE and STARTF_USESTDHANDLES to create a console process, standard handles will not be replaced unless the existing value of the standard handle is NULL or a console pseudohandle.

Examples

Requirements

Minimum supported client

WindowsВ 2000 Professional [desktop apps only]

Оцените статью
Value Meaning
STD_INPUT_HANDLE (DWORD)-10
STD_OUTPUT_HANDLE (DWORD)-11
STD_ERROR_HANDLE (DWORD)-12