14. Консольные приложения: API-функции для работы с консольными приложениями.
14. Консольные приложения: API-функции для работы с консольными приложениями. Windows поддерживает два типа приложений: · основанные на графическом интерфейсе (Graphical User Interface, GUI); · консольные (Console User Interface, CUI) Консоль – текстовое окно. Консоль – интерфейс для ввода-вывода в текстовом режиме. Система создает консоль, когда запускается консольное приложение. Консоль состоит из входного буфера (input buffer) и одного или нескольких экранных буферов (screen buffers). Входной буфер содержит очередь входных событий (нажатие клавиш, события мыши, изменение размеров экранного буфера). Выходной буфер – это двумерный массив символов и цветовых данных для вывода на экран. Консольный процесс использует дескрипторы (описатели, handles) для доступа к входному и экранному буферам своей консоли. Дескриптор представляет собой индекс в таблице дескрипторов, принадлежащих процессу. Таблица дескрипторов содержит указатели на все объекты, используемые данным процессом. Чтобы получить дескриптор консоли, нужно использовать следующую функцию: HANDLE GetStdHandle (DWORD nStdHandle) Функция возвращает дескриптор одного из стандартных устройств: · стандартного ввода (standard input) · стандартного вывода (standard output) · стандартного сообщения об ошибке (standard error) Аргументом функции GetStdHandle является одна из следующих констант: · для ввода: STD_INPUT_HANDLE equ -10 · для вывода: STD_OUTPUT_HANDLE equ -11 · для сообщения об ошибке: STD_ERROR_HANDLE equ -12 Для вывода на консоль используется функция WriteConsole: BOOL WriteConsole( HANDLE hConsoleOutput, ; дескриптор выходного буфера консоли const VOID* lpBuffer, ; адрес строки для вывода на консоль DWORD nNumberOfCharsToWrite, ; длина строки LPDWORD lpNumberOfCharsWritten, ; адрес переменной, куда будет помещено количество действительно выведенных символов
LPVOID lpReserved ); зарезервировано, нужно 0 Для завершения приложения используется функция ExitProcess: VOID ExitProcess(UINT uExitCode) Для создания консоли из процесса можно воспользоваться двумя способами: 1) функция AllocConsole (без аргументов) 2) функция CreateProcess с параметром CREATE_NEW_CONSOLE При завершении программы консоль автоматически освобождается. Установку позиции курсора осуществляет функция SetConsoleCursorPosition: BOOL SetConsoleCursorPosition( HANDLE hConsoleOutput, COORD dwCursorPosition); Заголовок окна консоли определяет функция SetConsoleTitle: BOOL SetConsoleTitle( LPCTSTR lpConsoleTitle); где lpConsoleTitle – адрес строки, оканчивающейся на ноль (в OEM-кодировке). Всего консольных функций около 60 При правильном их завершении возвращается ненулевое значение В случае ошибки в EAX помещается ноль Отладку консольных приложений можно осуществлять в дизассемблерах (W32Dasm, OllyDbg)
15. Обработка событий в консольных приложениях. Программирование в Windows основано на событийной модели – приложение получает сообщения о событиях, происходящих Для получения сообщений от клавиатуры Структура INPUT_RECORD: typedef struct _INPUT_RECORD { WORD EventType; union { KEY_EVENT_RECORD KeyEvent; MOUSE_EVENT_RECORD MouseEvent; WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent; MENU_EVENT_RECORD MenuEvent; FOCUS_EVENT_RECORD FocusEvent; } Event; } INPUT_RECORD; Виртуальные коды некоторых клавиш: · VK_BACK (08) – BACKSPACE · VK_TAB (09) – TAB · VK_RETURN (0D) – ENTER · VK_SHIFT (10) – SHIFT · VK_CONTROL (11) – CTRL
· VK_ESCAPE (1B) – ESC · VK_LSHIFT (A0) – Left SHIFT · VK_RSHIFT (A1) – Right SHIFT wVirtualScanCode - в иртуальный скан-код нажатой клавиши, который представляет значение, сгенерированное клавиатурой. dwControlKeyState – указывает состояние управляющих клавиш. dwSize – структура COORD, которая содержит размер экранного буфера консоли в символах столбцов и строк. Для консольного приложения определено пять критических событий: · CTRL + C · CTRL + BREAK · Закрытие консоли (кнопка «Закрыть») · Завершение сеанса (Log Off) · Завершение работы системы (Shut Down) По умолчанию эти события обрабатывает система.
16. GUI-приложения: структура сообщения, процесс обработки сообщений. GUI – Graphical User Interface – графический интерфейс пользователя Сообщение представляется следующей структурой: typedef struct { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG hwnd – дескриптор окна, куда адресовано сообщение. message – код сообщения. Приложение может использовать только младшее слово. Старшее слово зарезервировано системой. wParam – дополнительная информация; зависит от типа сообщения. lParam – дополнительная информация; зависит от типа сообщения. time – время, когда сообщение было послано. pt – координаты указателя мыши в момент, когда сообщение было послано. Младшее слово – Х, старшее – Y. Процесс обработки сообщений в Windows:
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|