Форум программистов, компьютерный форум, киберфорум
Assembler: MASM64, х64/long mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.87/89: Рейтинг темы: голосов - 89, средняя оценка - 4.87
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16374 / 7686 / 1080
Регистрация: 11.11.2010
Сообщений: 13,761
16.03.2016, 10:14  [ТС]
Студворк — интернет-сервис помощи студентам
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <windows.h>
 
VOID main(void)
{
    HANDLE hStdout, hNewScreenBuffer;
    SMALL_RECT srctReadRect;
    SMALL_RECT srctWriteRect;
    CHAR_INFO chiBuffer[160];       // [2][80];
    COORD coordBufSize;
    COORD coordBufCoord;
    BOOL fSuccess;
 
    // Получим дескриптор STDOUT экранного буфера из которого будем копировать и создадим
    // новый экранный буфер, в который будем копировать.
 
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
    hNewScreenBuffer = CreateConsoleScreenBuffer(
       GENERIC_READ |               // доступ к чтению/записи
       GENERIC_WRITE,
       0,                           // совместно не используется
       NULL,                        // атрибутов защиты нет
       CONSOLE_TEXTMODE_BUFFER,       // должен быть TEXTMODE
       NULL);                       // зарезервирован, должен быть NULL
    if (hStdout == INVALID_HANDLE_VALUE ||
            hNewScreenBuffer == INVALID_HANDLE_VALUE)
    {
        MyErrorExit("CreateConsoleScreenBuffer");
    }
 
    // Сделаем новый экранный буфер активным экранным буфером.
 
    if (! SetConsoleActiveScreenBuffer(hNewScreenBuffer) )
        MyErrorExit("SetConsoleActiveScreenBuffer");
 
    // Установим прямоугольник источника.
 
    srctReadRect.Top = 0;    // верхний левый: строчка 0, колонка 0
    srctReadRect.Left = 0;
    srctReadRect.Bottom = 1; // нижний правый: строчка 1, колонка 79
    srctReadRect.Right = 79;
 
    // Размер временного буфера равен 2 строчки x 80 колонок.
 
    coordBufSize.Y = 2;
    coordBufSize.X = 80;
 
    // Верхняя левая ячейка назначения временного буфера равна строка 0, колонка 0.
 
    coordBufCoord.X = 0;
    coordBufCoord.Y = 0;
 
    // Скопируем блок из экранного буфера во временный буфер.
 
    fSuccess = ReadConsoleOutput(
       hStdout,         // экранный буфер, из которого читаем
       chiBuffer,       // буфер, в который копируем
       coordBufSize,    // размер колонки/строки chiBuffer
       coordBufCoord,   // верхняя левая ячейка назначения в chiBuffer
       &srctReadRect);  // экранного буфер прямоугольника, из которого читаем  
 
    if (! fSuccess)
        MyErrorExit("ReadConsoleOutput");
 
    // Установим прямоугольник назначения.
 
    srctWriteRect.Top = 10;    // верхний левый: строка 10, колонка 0
    srctWriteRect.Left = 0;
    srctWriteRect.Bottom = 11; // нижний правый: строка 11, колонка 79
    srctWriteRect.Right = 79;
 
    // Копируем из временного буфера в новый экранный буфер.
 
    fSuccess = WriteConsoleOutput(
        hNewScreenBuffer,   // экранный буфер, в который будем записывать
        chiBuffer,          // буфер, из которого копируем
        coordBufSize,       // размер колонки/строки chiBuffer
        coordBufCoord,      // верхняя левая ячейка источника в chiBuffer
        &srctWriteRect);    // прямоугольник назначения экранного буфера
    if (! fSuccess)
        MyErrorExit("WriteConsoleOutput");
    Sleep(10000);
 
    // Восстановление исходного активного экранного буфера.
 
    if (! SetConsoleActiveScreenBuffer(hStdout))
        MyErrorExit("SetConsoleActiveScreenBuffer");
 
}
Функция ReadConsoleInput может быть использована для непосредственного обращения к буферу ввода консоли. Когда консоль создается, включается ввод информации от мыши, а ввод данных окна отключается. Чтобы гарантировать, что процесс получает все события ввода, этот пример использует функцию SetConsoleMode, чтобы включить ввод информации от окна и мыши. Затем он входит в цикл, который читает и обрабатывает консольные события ввода.
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
VOID MouseEventProc(MOUSE_EVENT_RECORD);
VOID ResizeEventProc(WINDOW_BUFFER_SIZE_RECORD);
VOID KeyEventProc(KEY_EVENT_RECORD);
VOID GetInputEvents(VOID);
 
DWORD main(VOID)
{
    HANDLE hStdin;
    DWORD cNumRead, fdwMode, fdwSaveOldMode, i;
    INPUT_RECORD irInBuf[128];
 
    // Получим стандартный дескриптор ввода.
 
    hStdin = GetStdHandle(STD_INPUT_HANDLE);
    if (hStdin == INVALID_HANDLE_VALUE)
        MyErrorExit("GetStdHandle");
 
    // Сохраним текущий режим ввода для будущего восстановления при
    // выходе из программы.
 
    if (! GetConsoleMode(hStdin, &fdwSaveOldMode) )
        MyErrorExit("GetConsoleMode");
 
    // Включим события ввода от мыши и окна.
 
    fdwMode = ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT;
    if (! SetConsoleMode(hStdin, fdwMode) )
        MyErrorExit("SetConsoleMode");
 
    // Цикл чтения и обработки событий ввода.
 
    while (1)
    {
 
    // Ожидание событий.
 
        if (! ReadConsoleInput(
                hStdin,      // дескриптор буфера ввода
                irInBuf,     // буфер, в котором читаем
                128,         // размер буфера чтения
                &cNumRead) ) // число прочитанных записей
            MyErrorExit("ReadConsoleInput");
 
   // Направляем события соответствующим обработчикам.
 
        for (i = 0; i < cNumRead; i++)
        {
            switch(irInBuf[i].EventType)
            {
                case KEY_EVENT: // ввод с клавиатуры
                    KeyEventProc(irInBuf[i].Event.KeyEvent);
                    break;
 
                case MOUSE_EVENT: // ввод от мыши
                    MouseEventProc(irInBuf[i].Event.MouseEvent);
                    break;
 
                case WINDOW_BUFFER_SIZE_EVENT: // изменение размера
                                               // экранного буфера
                    ResizeEventProc(
                        irInBuf[i].Event.WindowBufferSizeEvent);
                    break;
 
                case FOCUS_EVENT:  // игнорирование событий фокуса
 
                case MENU_EVENT:   // игнорирование событий меню
                    break;
 
                default:
                    MyErrorExit("unknown event type");
                    break;
            }
        }
    }
 
    return 0;
}
Имеется два способа очистки экрана в консольной программе. Первый способ состоит в том, чтобы использовать системную функцию языка C во время выполнения как ниже указано:
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
#include <stdlib.h>
 
void main()
{
   system("cls");
}
Системная функция вызывает команду cls, предусмотренную интерпретатором команд, чтобы очистить экран.
Второй ― состоит в том, чтобы записать, что функция программно очищает экран, используя функции FillConsoleOutputCharacter и FillConsoleOutputAttribute . Нижеследующий типовой код демонстрирует эту методику.
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
void cls( HANDLE hConsole )
{
COORD coordScreen = { 0, 0 }; // исходная позиция для курсора
   DWORD cCharsWritten;
   CONSOLE_SCREEN_BUFFER_INFO csbi;
   DWORD dwConSize;
// Получим число символьных ячеек в текущем буфере.
 
   if( !GetConsoleScreenBufferInfo( hConsole, &csbi ))
      return;
   dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
// Заполним полностью экран пробелами.
 
   if( !FillConsoleOutputCharacter( hConsole, (TCHAR) ' ',
      dwConSize, coordScreen, &cCharsWritten ))
      return;
 
   // Получим текущие атрибуты текста.
 
   if( !GetConsoleScreenBufferInfo( hConsole, &csbi ))
      return;
 
   // Установим соответствующие атрибуты буфера.
 
   if( !FillConsoleOutputAttribute( hConsole, csbi.wAttributes,
      dwConSize, coordScreen, &cCharsWritten ))
      return;
// Поместим курсор в его изначальные координаты
 
   SetConsoleCursorPosition( hConsole, coordScreen );
}
2
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.03.2016, 10:14
Ответы с готовыми решениями:

Создание консольных приложений Windows
Когда-то у меня был Microsoft Visual C++ и я лишь клацал F5 для компиляции консольных приложений. Но счастье часто непродолжительно, и уже...

Найти книгу "Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows" в djvu
Здравствуйте. Весь инет обыскал, а найти книгу &quot;Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows&quot;...

Создание консольных приложений на С #. Нужно написать программу
Здравствуйте, уважаемые обитатели форума, мне нужна ваша помощь, помогите написать программу ... \ 1. Составить консольную программу...

22
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16374 / 7686 / 1080
Регистрация: 11.11.2010
Сообщений: 13,761
17.03.2016, 05:14  [ТС]
Функция SetConsoleWindowInfo может быть использована для прокручивания содержания экранного буфера в консольном окне. Эта функция может к тому же изменить и размер окна. Функция может или задать новые верхние левые и нижние правые углы окна экранного буфера как абсолютные координаты экранного буфера или задать изменения от текущих координат окна. Функция терпит неудачу, если координаты определяемого окна находятся вне границ экранного буфера.
Нижеследующий пример прокручивает вид экранного буфера на одну строку, изменяя абсолютные координаты окна, возвращенные функцией GetConsoleScreenBufferInfo.
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
HANDLE hStdout;
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
SMALL_RECT srctWindow;
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
// Получим размер текущего экранного буфера и позицию окна.
if (! GetConsoleScreenBufferInfo(hStdout, &csbiInfo))
MyErrorExit("GetConsoleScreenBufferInfo");
// Установим в srctWindow размеры текущего окна и местоположение.
srctWindow = csbiInfo.srWindow;
// Если окно не вверху экранного буфера, переместим его вверх на одну строку.
if ( srctWindow.Top > 0 ) {
srctWindow.Top -= 1;    // перемещение вверх на одну строку
srctWindow.Bottom -= 1; // перемещение вниз на одну строку
if (! SetConsoleWindowInfo(
hStdout,      // дескриптор экранного буфера
TRUE,         // абсолютные координаты
&srctWindow)) // зададим новое место
MyErrorExit("SetConsoleWindowInfo");
}


Та же самая прокрутка может быть сделана определением изменений в координатах окна.
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Получим позицию текущего окна экранного буфера
if (! GetConsoleScreenBufferInfo(hStdout, &csbiInfo))
MyErrorExit("GetConsoleScreenBufferInfo");
// Если окно не вверху экранного буфера, переместим его вверх на одну строку
if (csbiInfo.srWindow.Top > 0) {
srctWindow.Top = -1;    // перемещение вверх на одну строку
srctWindow.Bottom = -1; // перемещение вниз на одну строку
srctWindow.Left = 0;    // не изменяется
srctWindow.Right = 0;   // не изменяется
if (! SetConsoleWindowInfo(
hStdout,      // дескриптор экранного буфера
FALSE,        // небольшие изменения, не абсолютно
&srctWindow)) // зададим новое место
MyErrorExit("SetConsoleWindowInfo");
}


Функция ScrollConsoleScreenBuffer перемещает блок символьных знакомест из одной части экранного буфера в другую часть того же самого экранного буфера. Функция устанавливает верхние левые и нижние правые ячейки исходного прямоугольника, который будет перемещен и координаты назначения нового местоположения для верхней левой ячейки. Символ и данные о цвете в исходных ячейках перемещаются в новое место, а любые ячейки, оставленные пустыми при перемещении, заполняются заданным символом и цветом. Если задается прямоугольник отсечения по границам, ячейки вне него остаются неизменными.
Функция ScrollConsoleScreenBuffer может быть использована для удаления строки, при помощи установки координат первой ячейки в строке как координаты назначения и установки прямоугольника прокрутки, который включает в себя все строки ниже этой строки.
Нижеследующий пример выводит на экран использование прямоугольника отсечения по границам, чтобы прокрутить только нижние 15 строк экранного буфера консоли. Строки в определяемом прямоугольнике прокручиваются вверх по одной строке за раз, а верхняя строка блока отбрасывается. Содержание экранного буфера консоли вне прямоугольника отсечения по границам остается неизменным.
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
HANDLE hStdout; 
BOOL fSuccess; 
CONSOLE_SCREEN_BUFFER_INFO csbiInfo; 
SMALL_RECT srctScrollRect, srctClipRect; 
CHAR_INFO chiFill; 
COORD coordDest; 
 
hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
 
if (hStdout == INVALID_HANDLE_VALUE) 
    MyErrorExit("GetStdHandle"); 
 
// Получим размер экранного буфера. 
 
fSuccess = GetConsoleScreenBufferInfo(hStdout, &csbiInfo); 
 
if (! fSuccess) 
    MyErrorExit("GetConsoleScreenBufferInfo"); 
 
// Прямоугольник прокручивания содержит 15 нижних строчек экранного буфера. 
 
srctScrollRect.Top = csbiInfo.dwSize.Y - 16; 
srctScrollRect.Bottom = csbiInfo.dwSize.Y - 1; 
srctScrollRect.Left = 0; 
srctScrollRect.Right = csbiInfo.dwSize.X - 1; 
 
// Назначение прокручивания в прямоугольнике по одной строке вверх. 
 
coordDest.X = 0; 
coordDest.Y = csbiInfo.dwSize.Y - 17; 
 
// Прямоугольник отсечения - такой же самый, что и прямоугольник прокручивания. 
// Строка назначения остается неизменной
 
srctClipRect = srctScrollRect; 
 
// Заполним нижнюю строку зелеными пробелами. 
 
chiFill.Attributes = BACKGROUND_GREEN | FOREGROUND_RED; 
chiFill.Char.AsciiChar = ' '; 
 
// Прокрутим вверх одну строку.
 
fSuccess = ScrollConsoleScreenBuffer( 
    hStdout,         // дескриптор экранного буфера
    &srctScrollRect, // прямоугольник прокрутки 
    &srctClipRect,   // прямоугольник отсечения по границам 
    coordDest,       // верхняя левая ячейка назначения 
    &chiFill);       // заполнение символами и цветом

Это ― пример функции SetConsoleCtrlHandler, которая используется для установки управляющего обработчика .
Когда от CTRL+C принимается сигнал , управляющий обработчик возвращает (значение) 1 (TRUE), указывая, что он обработал сигнал. Это действие не допускает вызовы других управляющих обработчиков.
Когда принимается сигнал CTRL_CLOSE_EVENT, управляющий обработчик возвращает значение 1 (TRUE), заставляя систему показать на экране диалоговое окно, которое дает пользователю выбор окончания процесса и закрытия консоли или разрешения процесса, чтобы продолжить выполнение. Если пользователь выбирает не завершать работу процесса, система закрывает консоль, когда процесс наконец заканчивает свою работу.
Когда от CTRL+BREAK принимается сигнал CTRL_LOGOFF_EVENT или CTRL_SHUTDOWN_EVENT, управляющий обработчик возвращает значение 0 (FALSE). Это действие заставляет передать сигнал следующей управляющей функции обработчика. Если никакие другие управляющие обработчики не были зарегистрированы, или ни один из зарегистрированных обработчиков не возвращает значение 1 (TRUE), используется заданный по умолчанию обработчик, который приводит процесс к завершению работы.
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
BOOL CtrlHandler(DWORD fdwCtrlType) 
{ 
    switch (fdwCtrlType) 
    { 
        // Обработка сигнала CTRL+C. 
 
        case CTRL_C_EVENT: 
 
            Beep(1000, 1000); 
            return TRUE; 
 
// CTRL+CLOSE: подтверждение, что пользователь желает выйти из программы
 
        case CTRL_CLOSE_EVENT: 
 
            return TRUE; 
 
// Передадим другие сигналы следующему обработчику
 
        case CTRL_BREAK_EVENT: 
 
        case CTRL_LOGOFF_EVENT: 
 
        case CTRL_SHUTDOWN_EVENT: 
 
        default: 
 
            return FALSE; 
    } 
} 
 
void main(void) 
{ 
    BOOL fSuccess; 
 
    fSuccess = SetConsoleCtrlHandler( 
        (PHANDLER_ROUTINE) CtrlHandler,  // функция обработчика 
        TRUE);                           // добавляется в список 
 
    if (! fSuccess) 
        MyErrorExit("Could not set control handler"); 
}
2
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16374 / 7686 / 1080
Регистрация: 11.11.2010
Сообщений: 13,761
17.03.2016, 05:21  [ТС]
Проблемы консольных приложений
оригинал на английском
8-разрядные консольные функции используют кодовую страницу OEM. Все другие функции используют по умолчанию кодовую страницу ANSI. Это означает что, строки, возвращенные консольными функциями не могут быть обработаны правильно другими функциями и наоборот. Например, если FindFirstFileA возвращает строку, которая содержит некоторые расширенные символы ANSI, WriteConsoleA не будет показывать на экране строку должным образом.
Самое лучшее долгосрочное решение проблемы для консольной программы состоит в том, чтобы использовать Unicode. Исключая это решение проблемы, консольная программа должна использовать функцию SetFileApisToOEM. Эта функция изменяет относящиеся к процессу функции файла так, чтобы они произвели OEM строки набора символов, а не строки набора символов ANSI.
Это следующие функции файла:
Кликните здесь для просмотра всего текста
CopyFileGetFileAttributesLoadLibrary
CreateDirectoryGetFullPathNameLoadLibraryEx
CreateFileGetModuleFileNameMoveFile
CreateProcessGetModuleHandleMoveFileEx
DeleteFileGetSystemDirectoryOpenFile
FindFirstFileGetTempFileNameRemoveDirectory
FindNextFileGetTempPathSearchPath
GetCurrentDirectoryGetVolumeInformationSetCurrentDirectory
GetDiskFreeSpaceGetWindowsDirectorySetFileAttributes
GetDriveType_lopen 

Когда занимаешься с командными строками, консольная программа должна получить командную строку в форме Unicode и конвертировать ее в форму OEM, используя необходимые символьные функции для OEM.
Обратите внимание, также, что argv использует набор символов ANSI.
Нижеследующие функции используются для доступа к консоли.
Кликните здесь для просмотра всего текста
Функция Описание
AllocConsoleВыделяет новую консоль для вызывающего процесса.
AttachConsoleПодключает вызывающий процесс к консоли заданного процесса.
CreateConsoleScreenBufferСоздает экранный буфер консоли.
FillConsoleOutputAttributeУстанавливает текст и атрибуты цвета фона для заданного числа символьных знакомест.
FillConsoleOutputCharacterЗаписывает символ в экранном буфере консоли заданное число раз.
FlushConsoleInputBufferВыключает из работы консольный буфер ввода.
FreeConsoleОтключает вызывающий процесс от его консоли.
GenerateConsoleCtrlEventОтправляет заданный сигнал группе процессов консоли, которая совместно использует консоль, связанную с вызывающим процессом.
GetConsoleCPПолучает кодовую страницу ввода, используемую консолью, связанной с вызывающим процессом.
GetConsoleCursorInfoИзвлекает информацию о размере и виде курсора для заданного экранного буфера консоли.
GetConsoleDisplayModeПолучает режим визуального отображения текущей консоли.
GetConsoleFontSizeИзвлекает размер шрифта, используемого определяемым экранным буфером консоли.
GetConsoleModeИзвлекает текущий режим ввода данных буфера ввода консоли или текущего режима вывода экранного буфера консоли.
GetConsoleOutputCPПолучает кодовую страницу вывода данных, используемую консолью, связанной с вызывающим процессом.
GetConsoleProcessListПолучает перечень процессов, связанных с текущей консолью.
GetConsoleScreenBufferInfoИзвлекает информацию о заданном экранном буфере консоли.
GetConsoleSelectionInfoИзвлекает информацию о текущем выборе консоли.
GetConsoleTitleПолучает строку заголовка текущего консольного окна.
GetConsoleWindowИзвлекает дескриптор окна, используемый консолью, связанной с вызывающим процессом.
GetCurrentConsoleFontПолучает информацию о текущем шрифте консоли.
GetLargestConsoleWindowSizeПолучает размер самого большого возможного консольного окна.
GetNumberOfConsoleInputEventsИзвлекает число непрочитанных записей вводимых данных в буфере ввода консоли.
GetNumberOfConsoleMouseButtonsИзвлекает число кнопок на мыши, используемой текущей консолью.
GetStdHandleИзвлекает дескриптор стандартного ввода данных, стандартного вывода или стандартной ошибки устройства.
HandlerRoutineОпределяемая программой функция, используемая с функцией SetConsoleCtrlHandler.
PeekConsoleInputЧитает данные из заданного консольного буфера ввода без удаления их из буфера.
ReadConsoleЧитает символьный ввод данных из консольного буфера ввода и удаляет их из буфера.
ReadConsoleInputЧитает данные из консольного буфера ввода и удаляет их из буфера.
ReadConsoleOutputЧитает символьные данные и данные атрибутов цвета прямоугольного блока символьных знакомест в экранном буфере консоли.
ReadConsoleOutputAttributeКопирует атрибуты цвета текста и цвета фона заданного числа последовательных ячеек экранного буфера консоли.
ReadConsoleOutputCharacterКопирует ряд символов последовательных ячеек экранного буфера консоли.
ScrollConsoleScreenBufferПеремещает блок данных в экранном буфере.
SetConsoleActiveScreenBufferУстанавливает заданный экранный буфер, чтобы он был текущим отображенным экранным буфером консоли.
SetConsoleCPУстанавливает кодовую страницу ввода, используемую консолью, связанную с вызывающим процессом.
SetConsoleCtrlHandlerДобавляет или удаляет определяемую программой функцию HandlerRoutine из списка функций обработчика для вызывающего процесса.
SetConsoleCursorInfoУстанавливает размер и вид курсора для заданного экранного буфера консоли.
SetConsoleCursorPositionУстанавливает позицию курсора в заданном экранном буфере консоли.
SetConsoleModeУстанавливает режим ввода данных буфера ввода консоли или режима вывода экранного буфера консоли.
SetConsoleOutputCPУстанавливает кодовую страницу вывода данных, используемую консолью, связанной с вызывающим процессом.
SetConsoleScreenBufferSizeИзменяет размер заданного экранного буфера консоли.
SetConsoleTextAttributeУстанавливает атрибуты цвета символов переднего плана (текст) и фона, записанных в экранный буфер консоли.
SetConsoleTitleУстанавливает строку области заголовка для текущего консольного окна.
SetConsoleWindowInfoУстанавливает текущий размер и позицию окна экранного буфера консоли.
SetStdHandleУстанавливает дескриптор стандартного ввода данных, стандартного вывода или стандартной ошибки устройства.
WriteConsoleЗаписывает строку символов в экранном буфере консоли, начинающемся в текущем местоположении курсора.
WriteConsoleInputЗаписывает данные непосредственно в консольный буфер ввода.
WriteConsoleOutputЗаписывает данные атрибутов символов и цвета заданного прямоугольного блока символьных знакомест в экранном буфере консоли.
WriteConsoleOutputAttributeКопирует ряд атрибутов цвета текста и цвета фона последовательных ячеек экранного буфера консоли.
WriteConsoleOutputCharacterКопирует ряд символов в последовательные ячейки экранного буфера консоли.

Нижеследующие структуры используются для доступа к консоли.
Кликните здесь для просмотра всего текста
СтруктураОписание
CHAR_INFOСтруктура CHAR_INFO устанавливает символ Unicode или ANSI и его атрибуты. Эта структура используется консольными функциями, чтобы читать из и записывать в экранный буфер консоли.
CONSOLE_CURSOR_INFOСтруктура CONSOLE_CURSOR_INFO содержит информацию о курсоре консоли.
CONSOLE_FONT_INFOСтруктура CONSOLE_FONT_INFO содержит информацию для консольного шрифта.
CONSOLE_SCREEN_BUFFER_INFOСтруктура CONSOLE_SCREEN_BUFFER_INFO содержит информацию об экранном буфере консоли.
CONSOLE_SELECTION_INFOСтруктура CONSOLE_SELECTION_INFO содержит информацию для выбора консоли.
COORDСтруктура COORD определяет координаты символьного знакоместа в экранном буфере консоли. Начало системы координат (0,0) ― верхняя, левая ячейка буфера.
FOCUS_EVENT_RECORDСтруктура FOCUS_EVENT_RECORD используется, чтобы записать события с фокусом в консольной структуре INPUT_RECORD.
INPUT_RECORDСтруктура INPUT_RECORD используется, чтобы записывать события ввода данных в буфере ввода консоли. Эти записи могут читаться от буфера ввода при помощи использования функции ReadConsoleInput или PeekConsoleInput, или записываться в буфер ввода при помощи использования функция WriteConsoleInput.
KEY_EVENT_RECORDСтруктура KEY_EVENT_RECORD используется для записи событий ввода с клавиатуры в структуре INPUT_RECORD консоли.
MENU_EVENT_RECORDСтруктура MENU_EVENT_RECORD записывает о событиях меню в консольной структуре INPUT_RECORD.
MOUSE_EVENT_RECORDСтруктура MOUSE_EVENT_RECORD используется в консольной структуре INPUT_RECORD, чтобы сообщать о событиях ввода информации от мыши.
SMALL_RECTСтруктура SMALL_RECT определяет координаты верхнего левого и нижнего правого углов прямоугольника.
WINDOW_BUFFER_SIZE_RECORDСтруктура WINDOW_BUFFER_SIZE_RECORD используется в консольной структуре INPUT_RECORD, чтобы записать изменения в размерах экранного буфера консоли.

Нижеследующие константы событий используются в параметре event функции повторного вызова WinEventProc. Для получения дополнительной информации, см. статью WinEvents.
Кликните здесь для просмотра всего текста
СобытиеОписание
EVENT_CONSOLE_CARETПереместилась каретка консоли. Параметр idObject ― одно или несколько нижеследующих значений:
  • CONSOLE_CARET_SELECTION
  • CONSOLE_CARET_VISIBLE
Параметр idChild является структурой COORD, которая устанавливает текущую позицию курсора.
EVENT_CONSOLE_END_APPLICATIONПроцесс консоли закончил работу. Параметр idObject содержит идентификатор законченного процесса.
EVENT_CONSOLE_LAYOUTКомпоновка консоли изменилась.
EVENT_CONSOLE_START_APPLICATIONНачался новый консольный процесс. Параметр idObject содержит идентификатор недавно созданного процесса. Если приложение ― 16-разрядная прикладная программа, параметр idChild равен CONSOLE_APPLICATION_16BIT, а idObject является идентификатором процесса сеанса NTVDM связанного с консолью.
EVENT_CONSOLE_UPDATE_REGIONИзменился больше чем один символ. Параметр idObject является структурой COORD, которая устанавливает начало измененного региона. Параметр idChild является структурой COORD, которая устанавливает конец измененного региона.
EVENT_CONSOLE_UPDATE_SCROLLПроизошла прокрутка консоли. Параметр idObject ― горизонтальное расстояние, а параметр idChild ― вертикальное расстояние, на которое консоль прокрутилась.
EVENT_CONSOLE_UPDATE_SIMPLEИзменился отдельный символ. Параметр idObject ― структура COORD, которая устанавливает символ, который изменился. Параметр idChild устанавливает символ в старшем слове, а атрибуты символа в младшем слове.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.03.2016, 05:21

Запуск консольных приложений с кириллицей на англоязычной Windows
Всем привет! Установил Windows 10 с английским языком интерфейса. Сразу столкнулся с проблемой: консольные приложения, написанные на...

Как создать свой шрифт для консольных приложений Windows XP?
я знаю, что у windows используется два шрифта для консоли: 1) Lucida Console - это библиотека kernel32.dll 2) Точечные шрифты. ...

Установка 64-разрядной поверх 32-разрядной Windows 7
Здравствуйте! купил бук, на нем стоит 7базовая 32бита, можно както поставить 64 не сшибая винду? оперативка 4гб, а она поддерживает толко...

Разработка консольных приложений
Как в консольном приложении обеспечить вывод текста в кодировке 866 (MS-DOS) при наборе его в кодировке OEM. Без применения классов MFC

Компиляция консольных приложений VC 6.0
Может быть я совсем дурак, но программировать ни разу не пробовал и даже не знаю с чего начать. Вот купил книгу &quot;Как программировать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного. 1. Почему показания термометра заряжены целью? Цель заложена в самом. . .
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ По ссылке 403. Не очень информативно такую ссылку постить. Запись от Usaga размещена Сегодня в 06:46 . . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru