Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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 основано на событийной модели – приложение получает сообщения о событиях, происходящих
в системе и в самом приложении. Большинство событий связано с клавиатурой и мышью. Основа программирования в Windows – написание процедур, которые реагируют на сообщения операционной системы.

Для получения сообщений от клавиатуры
и мыши в консольном приложений можно использовать функцию ReadConsoleInput.

Структура 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...