- Установить фокус на заданное окно.
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