записаних в екранний буфер консолі функцією WriteFile lt; # justify gt; ReadConsoleInputA
Функція читає дані з консольного буфера введення і видаляє їх з буфера.
BOOL ReadConsoleInput (hConsoleInput, _RECORD lpBuffer, nLength, lpNumberOfEventsRead
); - дескриптор консольного буфера введення.
lpBuffer - покажчик на масив структур INPUT_RECORD lt; # justify gt; ExitProcess
Функція закінчує роботу процесу і всіх його потоков.ExitProcess (uExitCode
);
uExitCode - визначає код виходу для процесу, і для всіх потоків, які завершують роботу в результаті виклику цієї функції. Для того, щоб отримати значення виходу з процесу необхідно використовують функцію GetExitCodeProcess lt; # justify gt; KEY_EVENT - клавіатурне подія
СмещеніеДлінаЗначеніе + 44Прі натисканні клавіші значення поля більше нуля. + 82Колічество повторів при утриманні клавіші. + 102Віртуальний код клавіші. + 122Скан-код клавіші. + 142Для функції ReadConsoleInputA-молодший байт дорівнює ASCII-коду клавіші. Для функції ReadConsoleInputW слово містить код клавіші в двухбайтном кодуванні (Unicode). + 164Содержітся стану керуючих клавіш. Може бути сумою наступних констант: RIGHT_ALT_PRESSED equ 1h LEFT_ALT_PRESSED equ 2h RIGHT_CTRL_PRESSED equ 4h LEFT_CTRL_PRESSED equ 8h SHIFT_PRESSED equ 10h NUMLOCK_ON equ 20h SCROLLLOCK_ON equ 40h CAPSLOCK_ON equ 80h ENHANCED_KEY equ 100h Сенс констант очевидний. _EVENT - Подія з мишею
СмещеніеДлінаЗначеніе + 44Младшее слово - Х-координата курсора миші, старше слово - Y-координата миші. + 84Опісивает стан кнопок миші. Перший біт - ліва кнопка, другий біт - права кнопка, третій біт - середня кнопка. Біт встановлений - кнопку натиснуто. + 124Состояніе керуючих клавіш. Аналогічно попередній таблиці. + 164Может містити наступні значення: MOUSE_MOV equ 1h; був рух миші DOUBLE_CL equ 2h; був подвійне клацання
Лістинг ПРОГРАМИ
. asm
..386P
; плоска модель
. MODEL FLAT, stdcall
; константи
STD_OUTPUT_HANDLE equ - 11_INPUT_HANDLE equ - 10
; тип собитія_EV equ 1h_EV equ 2h
; атрибути цветов_BLUE equ 1h; синій колір букв_GREEN equ 2h; зелений колір букв_RED equ 4h; червоний колір букв_INTENSITY equ 8h; підвищена інтенсівность_BLUE equ 10h; синє світло фона_GREEN equ 20h; зелений колір фона_RED equ 40h; червоний колір фону
BACKGROUND_INTENSITY equ 80h; підвищена інтенсивність=2h + 8h; колір виведеного тексту=1h + 2h + 8h; колір виведеного тексту 2
; прототипи зовнішніх процедур
EXTERN GetStdHandle @ 4: NEARWriteConsoleA @ 20: NEARSetConsoleCursorPosition @ 8: NEARSetConsoleTitleA @ 4: NEARFreeConsole@0:NEARAllocConsole@0:NEARCharToOemA@8:NEARSetConsoleCursorPosition@8:NEARSetConsoleTextAttribute@8:NEARReadConsoleA@20:NEARSetConsoleScreenBufferSize@8:NEARExitProcess@4:NEARReadConsoleInputA@16:NEAR
; директиви компонувальнику для підключення бібліотекc: masm32 lib user32.libc: masm32 lib kernel32.lib
; ------------------------------------------------------------ STRUCWORD? WORD? ENDS
; сегмент даних
_ DATA SEGMENT DWORD PUBLIC USE32 DATA DWORD? DWORD? DB Введіть рядок: , 13,10,0DB Rabota konsoli , 0 DB 200 dup (?) DWORD? ; кількість виведених сімволовCOOR lt;? gt;
C0 DWORD? _KEY WORD 9 dup (?)
_ DATA ENDS
; сегмент коду
_ TEXT SEGMENT DWORD PUBLIC USE32 CODE :
; перекодіруя строкуOFFSET STR1OFFSET STR1CharToOemA @ 8
; утворити консоль
; спочатку звільнити вже існуючу
CALL FreeConsole @ 0AllocConsole @ 0
; отримати HANDL1 вводаSTD_INPUT_HANDLEGetStdHandle @ 4
MOV HANDL1, EAX
; отримати HANDL виведення
PUSH STD_OUTPUT_HANDLEGetStdHandle @ 4
MOV HANDL, EAX
; встановити новий розмір вікна консолі
MOV CRD.X, 100CRD.Y, 25CRDEAXSetConsoleScreenBufferSize @ 8
; задати заголовок вікна консолі
PUSH OFFSET STR2SetConsoleTitleA @ 4
; встановити позицію курсораCRD.X, 0
MOV CRD.Y, 0CRDHANDL
CALL SetConsoleCursorPosition @ 8
; задати колірні атрибути виведеного т...