Список использованных API-функций




- Установить фокус на заданное окно.

SendMessage - Послать сообщение окну.

CreateWindow - Создать окно.

DefWindowProc - Вызывается для сообщений, которые не обрабатываются функцией окна.

DispatchMessage - Вернуть управление Windows с передачей сообщения предназначенному окну.

ExitProcess - Закончить данный процесс со всеми подзадачами (потоками).

GetMessage - Получить очередное сообщение из очереди сообщений данного приложения.

GetModuleHandle - Получить дескриптор приложения.

LoadCursor - Загрузить системный курсор или курсор, определенный в файле ресурсов.

LoadIcon - Загрузить системную иконку или иконку, определенную в файле ресурсов.

PostQuitMessage - Послать текущему приложению сообщение WM_QUIT.

RegisterClass - Зарегистрировать класс окон.

ShowWindow - Показать окно, установить статус показа.

TranslateMessage - Транслировать клавиатурные сообщения в ASCII-коды.

UpdateWindow - Обновить рабочую область окна.

BeginPaint - Получить контекст при получении сообщения WM_PAINT- Удалить контекст, полученный при помощи BeginPaint.- Вывести текст в окно.- Установить цвет фона для вывода текста.- Перерисовать окно.

 

Основы вызова API-функций

 

Функции API в ассемблере вызываются способом, схожим с вызовом в языках высокого уровня. Для этого все передаваемые параметры передаются в стек в обратном порядке.

Например, функция:

SendMessage(

__in HWND hWnd,

__in UINT Msg,

__in WPARAM wParam,

__in LPARAM lParam

);

будет вызвана в ассемблере по следующему шаблону:

includelibuser32.lib

EXTERNSendMessageA@16:NEARDB 'Введите текст',0

HWNDEDT1 DWORD 0

 

OFFSET TEXT0WM_SETTEXTHWNDEDT1SendMessageA@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 //указатель

);WINAPI DefWindowProc(

__in HWND hWnd, //дескриптор окна

__in UINT Msg, //сообщение

__in WPARAM wParam, //дополнительная информация сообщения

__in LPARAM lParam //дополнительная информация сообщения

);

LRESULT WINAPI DispatchMessage(

__in const MSG *lpmsg //указатель на структуру, содержащую сообщение

);WINAPI ExitProcess(

__in UINT uExitCode //код выхода

);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

);WINAPI LoadCursor(

__in_opt HINSTANCE hInstance, //дескриптор экземпляра модуля

__in LPCTSTR lpCursorName //имя ресурса курсора для загрузки

);WINAPI LoadIcon(

__in_opt HINSTANCE hInstance,

__in LPCTSTR lpIconName //имя ресурса иконки для загрузки

);WINAPI PostQuitMessage(

__in int nExitCode //код выхода из приложения

);WINAPI RegisterClass(

__in const WNDCLASS *lpWndClass //указатель на WINDCLASS структуры

);WINAPI ShowWindow(

__in HWND hWnd, //дескриптор окна

__in int nCmdShow //как окно будет показано на экране

);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 структуру

);TextOut(

__in HDC hdc, //дескриптор контекста устройств

__in int nXStart, //координата Х

__in int nYStart, //коорданата Y

__in LPCTSTR lpString, //указатель на строку

__in int cchString //длина строки

);SetBkColor(

__in HDC hdc, //дескриптор контекста устройств

__in COLORREF crColor //новый цвет фона, используется RGB макрос

);InvalidateRect(

__in HWND hWnd, //дескриптор окна

__in const RECT *lpRect, //указатель на RECT структуру

__in BOOL bErase //указывает будет ли фон внутри области

);

Аналогичным образом задаются структуры. Так, структуре:

typedef struct tagMSG { // msghwnd;message;wParam;lParam;time;pt;

} MSG;

Соответствует код:STRUCDD?DD?DD?DD?DD?DD?

MSGSTRUCT ENDS

typedef struct tagWNDCLASS {style;lpfnWndProc;cbClsExtra;cbWndExtra;hInstance;hIcon;hCursor;hbrBackground;lpszMenuName;lpszClassName;

} WNDCLASS, *PWNDCLASS;

Соответствует код:STRUCDD?DD?DD?DD?DD?DD?DD?DD?DD?DD?ENDSstruct tagPAINTSTRUCT { // pshdc;fErase;rcPaint;fRestore;fIncUpdate;rgbReserved[32];

} PAINTSTRUCT;

Соответствует код:STRUCDWORD 0DWORD 0DWORD 0DWORD 0DWORD 0DWORD 0DWORD 0DWORD 0DB 32 dup(0) ENDS



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-04-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: