Форум программистов, компьютерный форум, киберфорум
Assembler: MASM64, х64/long mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/89: Рейтинг темы: голосов - 89, средняя оценка - 4.87
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
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___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
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___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru