В следующем примере кода, почему записи WINDOW_BUFFER_SIZE_EVENT
передаются во входной буфер консоли? Для воспроизведения измените размер окна консоли, перетаскивая его левый или правый край, и вы увидите события, напечатанные на консоли.
Согласно документации, флаг ENABLE_WINDOW_INPUT
должен быть передан в SetConsoleMode
для включить отчет WINDOW_BUFFER_SIZE_EVENT
. В приведенном ниже примере отключены все флаги.
В любом случае, я знаю, что могу просто игнорировать события и ничего с ними не делать, но меня беспокоит, когда в документации Windows API написано, что ожидается одно поведение, но я наблюдаю другое поведение. Я что-то пропустил? Или это, возможно, ошибка в Windows или просто неправильная документация?
Я работаю Windows 10 Pro (версия 1903, сборка ОС 18362.720).
Соответствует Ссылки
SetConsoleMode
ReadConsoleInput
INPUT_RECORD
Чтение событий входного буфера
Пример кода
#include <Windows.h>
#include <stdio.h>
int main()
{
HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE);
// turn off all flags
SetConsoleMode(hInput, 0);
INPUT_RECORD inputRecord;
DWORD eventsRead;
while (ReadConsoleInput(hInput, &inputRecord, 1, &eventsRead)) {
printf("EventType: %x\n", inputRecord.EventType);
}
}
РЕДАКТИРОВАНИЕ
Ссылка на эту же проблему в потоке Microsoft Terminal GitHub в 2018 году: https://github.com/microsoft/terminal/issues/281#issuecomment -440463031
"Идентификатор задачи: 19686633 - Убедитесь, что события для размера окна буфера и размера окна просмотра соответствуют ENABLE_WINDOW_INPUT flag"