
- •1 Оглавление
- •2 Введение
- •3 Описание использованного набора макросредств.
- •4. ИспользованныеApi-функции и системные константы.
- •4.1 Список использованных констант и структур.
- •4.2 Список использованныхApi-функций.
- •4.3 Основы вызова api-функций.
- •5 Демонстрационная программа
- •5.1 Листинг:
- •5.2 Демонстрация работы:
- •6 Вывод
- •7 Литература:
- •8 Программное обеспечение:
4.2 Список использованныхApi-функций.
SetFocus– Установить фокус на заданное окно.
SendMessage- Послать сообщение окну.
CreateWindow– Создать окно.
DefWindowProc- Вызывается для сообщений, которые не обрабатываются функцией окна.
DispatchMessage- Вернуть управление Windows с передачей сообщения предназначенному окну.
ExitProcess- Закончить данный процесс со всеми подзадачами (потоками).
GetMessage- Получить очередное сообщение из очереди сообщений данного приложения.
GetModuleHandle- Получить дескриптор приложения.
LoadCursor- Загрузить системный курсор или курсор, определенный в файле ресурсов.
LoadIcon- Загрузить системную иконку или иконку, определенную в файле ресурсов.
PostQuitMessage- Послать текущему приложению сообщениеWM_QUIT.
RegisterClass- Зарегистрировать класс окон.
ShowWindow- Показать окно, установить статус показа.
TranslateMessage- Транслировать клавиатурные сообщения в ASCII-коды.
UpdateWindow- Обновить рабочую область окна.
BeginPaint- Получить контекст при получении сообщенияWM_PAINT
EndPaint - Удалить контекст, полученный при помощиBeginPaint.
TextOut - Вывести текст в окно.
SetBkColor - Установить цвет фона для вывода текста.
InvalidateRect - Перерисовать окно.
4.3 Основы вызова api-функций.
Функции APIв ассемблере вызываются способом, схожим с вызовом в языках высокого уровня. Для этого все передаваемые параметры передаются в стек в обратном порядке.
Например, функция:
SendMessage(
__in HWND hWnd,
__in UINT Msg,
__in WPARAM wParam,
__in LPARAM lParam
);
будет вызвана в ассемблере по следующему шаблону:
includelibuser32.lib
EXTERNSendMessageA@16:NEAR
TEXT DB 'Введите текст',0
HWNDEDT1 DWORD 0
-
-
PUSH OFFSET TEXT
PUSH 0
PUSH WM_SETTEXT
PUSH HWNDEDT1
CALL SendMessageA@16
В таком вызове APIфункцииSendMessage добавляется символА, указывающий наANSI-стандарт, символ@в роли разделителя и числоNв конце, обозначающий количество байт информации, которая передается в функцию через стек.
Далее представим, какие параметры передаются для остальных API-функции:
HWND WINAPI SetFocus(
__in_opt HWND hWnd
);
Тип: HWND
Дескриптор окна, которое будет получать ввод с клавиатуры. Если этот параметр равен NULL , нажатия клавиш игнорируются.
HWND WINAPI CreateWindow(
__in_opt LPCTSTR lpClassName,//строка
__in_opt LPCTSTR lpWindowName,//имя окна
__in DWORD dwStyle,//стиль задаваемого окна
__in int x,//первоначальное горизонтально положение окна
__in int y,//первоначальное вертикальное положение окна
__in int nWidth, //ширина
__in int nHeight, //высота
__in_opt HWND hWndParent, //окно владельца создаваемого окна
__in_opt HMENU hMenu, //обращаться к меню
__in_opt HINSTANCE hInstance, //дескриптор
__in_opt LPVOID lpParam //указатель
);
LRESULT WINAPI DefWindowProc(
__in HWND hWnd, //дескриптор окна
__in UINT Msg, //сообщение
__in WPARAM wParam, //дополнительная информация сообщения
__in LPARAM lParam //дополнительная информация сообщения
);
LRESULT WINAPI DispatchMessage(
__in const MSG *lpmsg //указатель на структуру, содержащую сообщение
);
VOID WINAPI ExitProcess(
__in UINT uExitCode //код выхода
);
BOOL WINAPI GetMessage(
__out LPMSG lpMsg, //указатель на MSG структуру
__in_opt HWND hWnd, //дескриптор окна
__in UINT wMsgFilterMin, // целое число из самых низких сообщение значение для поиска
__in UINT wMsgFilterMax // целое значение самого высокого значения сообщения должны быть извлечены.
);
HMODULE WINAPI GetModuleHandle(
__in_opt LPCTSTR lpModuleName // имя загружаемого модуля (либо DLL или EXE-файл),если EXE файл то параметр равен NULL
);
HCURSOR WINAPI LoadCursor(
__in_opt HINSTANCE hInstance, //дескриптор экземпляра модуля
__in LPCTSTR lpCursorName //имя ресурса курсора для загрузки
);
HICON WINAPI LoadIcon(
__in_opt HINSTANCE hInstance,
__in LPCTSTR lpIconName //имя ресурса иконки для загрузки
);
VOID WINAPI PostQuitMessage(
__in int nExitCode //код выхода из приложения
);
ATOM WINAPI RegisterClass(
__in const WNDCLASS *lpWndClass //указатель на WINDCLASS структуры
);
BOOL WINAPI ShowWindow(
__in HWND hWnd, //дескриптор окна
__in int nCmdShow //как окно будет показано на экране
);
BOOL WINAPI TranslateMessage(
__in const MSG *lpMsg //указатель на MSG структуру
);
BOOL UpdateWindow(
__in HWND hWnd //обращается к окну, чтобы быть обновиться
);
HDC BeginPaint(
__in HWND hwnd, //обращается к окну, чтобы перекрасить
__out LPPAINTSTRUCT lpPaint //указатель на PAINTSTRUCT структуру
);
BOOL EndPaint(
__in HWND hWnd, //дескриптор окна, которое было перекращено
__in const PAINTSTRUCT *lpPaint // указатель на PAINTSTRUCT структуру
);
BOOL TextOut(
__in HDC hdc, //дескриптор контекста устройств
__in int nXStart, //координата Х
__in int nYStart, //коорданата Y
__in LPCTSTR lpString, //указатель на строку
__in int cchString //длина строки
);
COLORREF SetBkColor(
__in HDC hdc, //дескриптор контекста устройств
__in COLORREF crColor //новый цвет фона, используется RGB макрос
);
BOOL InvalidateRect(
__in HWND hWnd, //дескриптор окна
__in const RECT *lpRect, //указатель на RECT структуру
__in BOOL bErase //указывает будет ли фон внутри области
);
Аналогичным образом задаются структуры. Так, структуре:
typedef struct tagMSG { // msg
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;
Соответствует код:
MSGSTRUCT STRUC
MSHWND DD ?
MSMESSAGE DD ?
MSWPARAM DD ?
MSLPARAM DD ?
MSTIME DD ?
MSPT DD ?
MSGSTRUCT ENDS
typedef struct tagWNDCLASS {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS, *PWNDCLASS;
Соответствует код:
WNDCLASS STRUC
CLSSTYLE DD ?
CLWNDPROC DD ?
CLSCBCLSEX DD ?
CLSCBWNDEX DD ?
CLSHINST DD ?
CLSHICON DD ?
CLSHCURSOR DD ?
CLBKGROUND DD ?
CLMENNAME DD ?
CLNAME DD ?
WNDCLASS ENDS
typedef struct tagPAINTSTRUCT { // ps
HDC hdc;
BOOL fErase;
RECT rcPaint;
BOOL fRestore;
BOOL fIncUpdate;
BYTE rgbReserved[32];
} PAINTSTRUCT;
Соответствует код:
PAINTSTR STRUC
hdc DWORD 0
fErase DWORD 0
left DWORD 0
top DWORD 0
right DWORD 0
bottom DWORD 0
fRes DWORD 0
fIncUp DWORD 0
Reserv DB 32 dup(0)
PAINTSTR ENDS