Программа для вызова API функций

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Введение

Свыше 90 процентов настольных и портативных компьютеров работают под управлением Windows. Консультант по Windows Джеффри Рихтер считает, что «Microsoft Windows очень сложная операционная система. Она включает столько всего и делает так много, что одному человеку просто не под силу полностью разобраться в этой системе». Курсовая работа посвящена изучению одного из разделов операционной системы.

Самые важные части операционной системы Windows написаны на языке ассемблера. Поэтому операционную систему Windows нагляднее изучать, используя именно этот язык. Язык ассемблера -- это символическое представление машинного языка. Все процессы в машине на самом низком, аппаратном уровне приводятся в действие только командами (инструкциями) машинного языка. Ассемблер может понадобиться для оптимизации кода программ, написания драйверов, трансляторов, программирования некоторых внешних устройств и т. п.

Что касается операционной системы Windows, то здесь, как ни странно это прозвучит для некоторых программистов, программировать на ассемблере гораздо легче, чем в операционной системе MS DOS, и ничуть не сложнее чем на Си, и при этом получается компактный, эффективный и быстрый код. При работе с языками высокого уровня теряются определенные алгоритмические навыки. И процесс заходит всё дальше. Только ради повышения своего профессионального уровня стоит заниматься программированием на ассемблере

Теоретическая часть

С 1991 года операционная система Windows, созданная компанией Microsoft сменила несколько версий. За это время она выпускалась и для 16-разрядных процессоров и для 32-разрядных. А сегодня уже появились версии Windows для работы с 64-разрядными процессорами. Менялся не только дизайн системы, но и принципы ее внутренней архитектуры. Неизменным по сей день остается одно — наличие динамических библиотек (DLL), являющихся основными поставщиками функций (Application Programming Interface — API) для работы системы и приложений.

За время существования 32-разрядной Windows функции API не изменились, меняется лишь их количество. Для удобства разработчиков программы для Windows, все функции API разбиты на определенные категории и находятся в соответствующих библиотеках динамической компоновки (DLL). Вот не полный перечень таких библиотек, приведённый в таблице 1:

Таблица 1

Библиотека

Описание

kernel32. dll

Системные функции низкого уровня.

В этой библиотеке находятся функции управления памятью,

задачами, распределения ресурсов и т. д.

user32. dll

Функции, управляющие работой Windows.

В этой библиотеке находятся функции для работы с сообщениями,

меню, указателями мыши, курсорами, таймерами

и большинство других функций, не связанных с выводом на экран.

gdi32. dll

Библиотека интерфейса графических устройств (GDI).

Содержит функции, связанные с выводом на устройства. В ней находится

большинство функций рисования, работы с контекстами устройств,

метафайлами, координатами и шрифтами.

comdlg32. dll

lz32. dll

version32. dll

Эти библиотеки обеспечивают дополнительные возможности, в том числе

поддержку стандартных диалоговых окон, сжатия файлов и контроля версий.

advapi32. dll

Библиотека содержит функции для работы с реестром Windows и

файлами инициализации (INI).

wininet. dll

В данной библиотеке содержатся функции для использования

Internet и FTP.

netapi32. dll

Сетевые функции Windows.

crypt32. dll

cryptdll. dll

cryptnet. dl

В библиотеках содержатся криптографические функции

и функции для работы с крипто-провайдерами.

ntdll. dl

Иногда в других библиотеках API функции всего лишь объявлены, а реализованы в данной библиотеке, но с другим именем.

comctl32. dll

В этой библиотеке реализован новый (усовершенствованный)

набор управляющих элементов Windows, в числе которых — иерархические списки и

улучшенные текстовые поля.

mapi32. dll

Содержит функции для работы с электронной почтой.

odbc32. dll

Это одна из dll, реализующих архитектуру ODBC (Open Database Connectivity). Функции предоставляют API для работы с базами данных.

winmm. dll

Обеспечивает доступ к мультимедиа.

Эти DLL находятся в системной папке Windows. Есть API функции, которые были созданы во времена Windows 9x и которые не работают на операционных системах семейства Windows NT.

Windows API развивается очень быстро. Количество функций растет так быстро, что уследить за всеми новшествами практически невозможно. Но, к счастью, это и не нужно. Чтобы профессионально пользоваться Windows API, необязательно становиться знатоком во всех его областях. Важно понять основные концепции использования, предоставляемых Windows функций и научиться читать документацию по API.

Окно в Windows является объектом, занимающим прямоугольный участок экрана. Даже если окно будет круглым, все равно оно вписывается в ассоциированную с его контекстом прямоугольную область. Окно может содержать другие окна, называемые дочерними. С каждым окном связанны функциональные возможности, присущие только ему, либо имеющие общие для всех окон особенности. Окно обладает рядом характеристик:

Атрибуты. Концепция окна отличается чрезвычайной гибкостью, поэтому неудивительно, что окно обладает множеством атрибутов. Одни относятся к внешнему виду окна (размер, позиция, видимость и т. д.); другие — определяют поведение окна, способы обработки нажатий клавиш на клавиатуре и кнопок мыши.

Сообщения. С каждым окном связана специальная функция — функция окна (window function). В этой функции реализуется цикл обработки сообщений, получаемых от различных источников. Самыми важными являются сообщения самой операционной системы.

Функциональность. Каждое окно обладает определенной функциональностью, присущей только этому классу окон, либо имеющей общие черты с функциональностью других окон системы.

Что касается внешнего вида окна, то он зависит от класса окна и примененного при создании окна стиля. Класс окна — это главный идентификатор, используемый при создании окон одного типа. Например, все текстовые поля в Windows относятся к классу Edit, кнопки — к классу Button, а статичные надписи — к классу Static. Каждый оконный класс имеет стандартный набор стилей, которые можно указать при создании окна, например, у оконного класса Static имеется стиль SS_CENTER, позволяющий отцентрировать выводимый на надписи текст. Стиль есть по сути цифра, а набор стилей — набор цифр, объединенных операцией ИЛИ (OR).

Реакция на сообщения также напрямую зависит от класса окна. Например, только у класса Static имеется возможность обработки сообщения STM_SETIMAGE, позволяющего ассоциировать с надписью какую-нибудь картинку или иконку.

При использовании Windows API возможно увеличить количество стилей и сообщений как класса в целом, так и отдельно взятого окна. Для этих целей Windows API содержит ряд функций, предназначенных для сабклассирования (для изменения одного отдельно взятого окна) и суперклассирования (для изменения целого оконного класса).

Описание функций, использующихся в программах

Функция GetModuleHandle

function GetModuleHandle (ModuleName: PChar): THandle;

Считывает описатель модуля.

Паpаметpы:

ModuleName: Имя модуля (заканчивающееся пустым символом).

Возвpащаемое значение: в случае успешного завеpшения — идентификатоp модуля; 0 — в пpотивном случае.

Функция находится в файле kernel32. dll.

Функция GetCommandLine

Извлекает командную строку для текущего процесса.

Синтаксис:

LPTSTR GetCommandLine (VOID)

Параметры:

У этой функции нет параметров.

Возвращаемые значения:

Величина возвращаемого значения — указатель на строку командно строки для текущего процесса.

Функция ExitProcess

Заканчивает работу процесса и всех его потоков.

Синтаксис:

VOID ExitProcess (UINT uExitCode);

Параметры:

uExitCode — [in] Определяет код выхода для процесса, и для всех потоков, которые завершают работу в результате вызова этой функции. Используйте функцию GetExitCodeProcess, чтобы получить значение выхода из процесса. Используйте функцию GetExitCodeThread, чтобы получить значение выхода из потока.

Возвращаемые значения:

У этой функции нет возвращаемого значения.

Замечания:

Функция ExitProcess — предпочтительный метод завершения процесса. Эта функция обеспечивает чистое отключение процесса. Такое завершение включает в себя вызов функций точек входа всех связанных динамически подключаемых библиотек (DLL) со значениями, указывающими, что процесс отключается от DLL. Если процесс заканчивается путем вызова TerminateProcess, DLL, к которым процесс подключен, не уведомляются о завершении процесса. После того, как все связанные DLL исполнили любое значение завершения, эта функция завершает работу текущего процесса.

Завершение процесса происходит по нижеследующим причинам:

1. Все дескрипторы объектов, открытые процессом, закрываются.

2. Все потоки в процессе завершают свою работу по исполнению кода.

3. Состояние объекта процесса становится сигнальным, удовлетворяя любые потоки, которые ждали завершения процесса.

4. Состояния всех потоков процесса, становятся сигнальными, удовлетворяя любые потоки, которые ждали завершения работы потоков.

5. Состояние завершения процесса изменяется из STILL_ACTIVE в значение выхода процесса.

Завершение процесса не заставляет дочерние процессы закончить свою работу.

Функция LoadIcon

function LoadIcon (Instance: THandle; IconName: PChar): HIcon;

Загpужает поименованный pесуpс пиктогpаммы.

Паpаметpы:

Instance: Экземпляp модуля, исполнимый файл котоpого содеpжит пиктогpамму или 0 для пpедопpеделенной пиктогpаммы.

IconName: Стpока или имя целочисленного идентификатоpа или пpедопpеделенная пиктогpамма, опpеделенная одной из констант idi.

Возвpащаемое значение: В случае успешного завеpшения — идентификатоp пиктогpаммы; 0 — впpотивном случае.

Функция находится в файле user32. dll.

Функция MessageBox

function MessageBox (Parent: HWnd; Txt, Caption: PChar; TextType: Word): Integer;

Создает и отобpажает блок диалога, содеpжащий указанное сообщение и заголовок, а также пpедопpеделенные пиктогpаммы и текстовые кнопки, в соответствии с паpаметpом TexType.

Паpаметpы:

Parent: Окно, владеющее блоком сообщений.

Txt: Отобpажаемое сообщение (заканчивающееся пустым символом).

Caption: Заголовок блока диалога (заканчивающийся пустым символом) или nil для «Error» («Ошибка»).

TextType: Одна или комбинация констант mb.

Возвpащаемое значение: в случае успешного завеpшения одна из следующих констант: id_Abort, id_Cancel, id_Ignore, id_No, id_OK, id_Retry или id_Yes.

Функция находится в файле user32. dll.

Функция Invoke

function Invoke (имя API функции, параметры): Integer;

Данная функция помещает параметры в стек и вызывает указанную API функцию.

Сообщение операционной системы Windows:

WM_SETICON — Приложение посылает окну данное сообщение, чтобы ассоциировать с ним новую иконку (значок).

WM_CLOSE — Сообщение, приходящее на процедуру окна при его закрытии. Приходит до WM_DESTROY. Дальнейшее выполнение DefWindowProc, EndDialog или WindowsDestroy и вызывает появление сообщения WM_DESTROY.

WM_INITDIALOG — Сообщение, приходящее на функцию диалогового окна вместо сообщения WM_CREATE.

WM_LBUTTONDOWN — Сообщение генерируется при нажатии левой кнопки мыши.

Функция CreateWindowEx

Создает перекрывающее, выпрыгивающее или дочернее окно с расширенным стилем; иначе, эта функция идентична функции CreateWindow. Для получения дополнительной информации о создании окна и полное описание других параметров функции CreateWindowEx, см. статью CreateWindow.

Синтаксис

HWND CreateWindowEx (

DWORD dwExStyle, // улучшенный стиль окна

LPCTSTR lpClassName, // указатель на зарегистрированное имя класса

LPCTSTR lpWindowName, // указатель на имя окна

DWORD dwStyle, // стиль окна

int x, // горизонтальная позиция окна

int y, // вертикальная позиция окна

int nWidth, // ширина окна

int nHeight, // высота окна

HWND hWndParent, // дескриптор родительского или окна владельца

HMENU hMenu, // дескриптор меню или ID дочернего окна

HINSTANCE hInstance, // дескриптор экземпляра прикладной программы

LPVOID lpParam // указатель на данные создания окна

);

Параметры

dwExStyle — [in] Определяет расширенный стиль создаваемого окна. Этот параметр может состоять из одного или нескольких значений следующих ниже:

Стиль

Предназначение

WS_EX_ACCEPTFILES

Определяет, что окно, созданное с этим стилем принимает файлы, перемещаемые при помощи информационной технологии «перетащи и вставь».

WS_EX_APPWINDOW

Активизирует окно верхнего уровня на панели задач, когда оно видимое.

WS_EX_CLIENTEDGE

Определяет, что окно имеет рамку с притопленным краем.

WS_EX_COMPOSITED

Windows XP: Рисует всех потомков по порядку снизу вверх, используя двойную буферизацию. Для получения дополнительной информации, см. Замечания. Этот стиль не может быть использован, если окно имеет стиль класса или установленные флажки стиля CS_OWNDC или CS_CLASSDC.

WS_EX_CONTEXTHELP

Включает вопросительный знак в строку заголовка окна. Когда пользователь щелкает мышью по вопросительному знаку, курсор меняется на вопросительный знак с указателем. Если пользователь затем щелкает мышью по дочернему окну, потомок принимает сообщение WM_HELP. Дочернее окно должно передать сообщение родительской оконной процедуре, которая должна вызвать функцию WinHelp, используя командуHELP_WM_HELP. Прикладная программа Справки показывает выскакивающее окно, которое обычно содержит справку для дочернего окна.

Стиль WS_EX_CONTEXTHELP не может использоваться со стилями WS_MAXIMIZEBOX или WS_MINIMIZEBOX.

WS_EX_CONTROLPARENT

Окно в себе содержит дочерние окна, которые должны принять участие в навигации по диалоговому окну. Если этот стиль определен, диспетчер диалогового окна заново вынуждает действовать внутри дочерних окон этого окна при выполнении навигационных операций типа обработки клавиши TAB, клавиши со стрелкой или ускорителей клавиатуры.

WS_EX_DLGMODALFRAME

Создает окно, которое имеет двойную рамку; окно может быть создано (необязательно) с областью заголовка, которую определяет стиль WS_CAPTION в параметре dwStyle.

WS_EX_LAYERED

Windows 2000/XP: Создает многослойное окно.

Обратите внимание! что этот стиль не может быть использован для дочерних окон. Также он не может быть использован, если окно имеет стиль класса или установленные флажки стиля CS_OWNDC или CS_CLASSDC.

WS_EX_LAYOUTRTL

Арабская и Еврейская версии Windows 98/Me, Windows 2000/XP: Создает окно, начало горизонтальной координаты которого, находится на правом крае. Увеличение горизонтальных значений продвигает курсор влево.

WS_EX_LEFT

Создает окно, которое имеет свойство «выравнивания по левой границе». Это — по умолчанию.

WS_EX_LEFTSCROLLBAR

Если язык оболочки Еврейский, Арабский или другой язык, который придерживается иного порядка чтения, вертикальная линейка прокрутки (если дается) находится слева от рабочей области. Для других языков, этот стиль игнорируется.

WS_EX_LTRREADING

Текст окна отображается, используя свойство порядка чтения слева направо. Это — по умолчанию.

WS_EX_MDICHILD

Создает MDI дочернее окно.

WS_EX_NOACTIVATE

Windows 2000/XP: окно верхнего уровня, созданное с этим стилем не становится приоритетным окном, когда пользователь щелкает кнопкой мыши по нему. Система не переводит это окно в активный режим, когда пользователь свертывает или закрывает приоритетное окно.

Чтобы активизировать окно, используйте функцию SetActiveWindow или SetForegroundWindow.

Окно по умолчанию не появляется на панели задач. Чтобы заставить окно появляться на панели задач, используйте стиль WS_EX_APPWINDOW.

WS_EX_NOINHERITLAYOUT

Windows 2000/XP: окно, созданное с этим стилем не передает свою компоновку своим дочерним окнам.

WS_EX_NOPARENTNOTIFY

Определяет, что дочернее окно, созданное с этим стилем не отправляет сообщение WM_PARENTNOTIFY своему родительскому окну, когда оно создается или разрушается.

WS_EX_OVERLAPPEDWINDOW

Комбинация стилей WS_EX_CLIENTEDGE и WS_EX_WINDOWEDGE.

WS_EX_PALETTEWINDOW

Комбинация стилей WS_EX_WINDOWEDGE, WS_EX_TOOLWINDOW и WS_EX_TOPMOST.

WS_EX_RIGHT

Окно имеет свойство «выравнивания по правому краю». Оно зависит от класса окна. Этот стиль имеет действие только тогда, если язык оболочек Еврейский, Арабский или другой язык, который поддерживает иной порядок выравнивания для чтения; иначе, стиль игнорируется.

Использование стиля WS_EX_RIGHT для статических органов управления или полей редактирования текста имеет то же самый результат, как и использование стиля SS_RIGHT или ES_RIGHT, соответственно. Использование этого стиля для командных кнопок имеет то же самое действие, как и использование стилей BS_RIGHT иBS_RIGHTBUTTON.

WS_EX_RIGHTSCROLLBAR

Вертикальная линейка прокрутки (если предоставляется) появляется справа от рабочей области. Это — по умолчанию.

WS_EX_RTLREADING

Если язык оболочки Еврейский, Арабский или другой язык, который придерживается иного порядка выравнивания для чтения, текст в окне отображается, используя порядок чтения справа — налево. Для других языков этот стиль игнорируется.

WS_EX_STATICEDGE

Создает окно с трехмерным стилем рамки, который предполагается использовать для элементов, которые не принимают вводимую информацию от пользователя.

WS_EX_TOOLWINDOW

Создает окно инструментальных средств; то есть окно предполагается использовать как плавающую инструментальную панель. Окно инструментальных средств имеет область заголовка, которая короче, чем нормальная строка заголовка, а заголовок окна выводится, с использованием меньшего шрифта. Окно инструментальных средств не появляется в панели задач или в диалоговом окне, которое появляется тогда, когда пользователь нажимает ALT+TAB. Если окно инструментальных средств имеет системное меню, его пиктограмма не отображается в заголовке. Однако, Вы можете показывать на экране системное меню, щелкая правой кнопкой мыши или, вводя с клавиатуры ALT+SPACE.

WS_EX_TOPMOST

Определяет, что окно, созданное с этим стилем должно быть размещено выше всех, не самых верхних окон и должно стоять выше их, даже тогда, когда окно деактивировано. Чтобы добавить или удалить этот стиль, используйте функцию SetWindowPos.

WS_EX_TRANSPARENT

Определяет, что окно, созданное с этим стилем не должно изображаться до тех пор, пока родственные окна уровнем ниже (которые были созданы тем же самым потоком) не будут изображены. Вид окна прозрачный, потому, что биты основных сестринских окон уже были окрашены.

Чтобы достигнуть прозрачности без этих ограничений, используйте функцию SetWindowRgn.

WS_EX_WINDOWEDGE

Определяет, что окно имеет рамку с выпуклым краем.

lpClassName

Указатель на строку с символом нуля в конце или атом класса, созданный предшествующим вызовом функции RegisterClass или RegisterClassEx. Атом должен быть в младшем слове параметраlpClassName; старшее слово должно быть нулевое. Если lpClassName является строкой, параметр устанавливает имя класса окна. Имя класса может быть любым именем, зарегистрированным функциейRegisterClass или RegisterClassEx, при условии, что модуль, который регистрирует класс, является тем же модулем, который создает окно. Имя класса может также быть любым из предопределенных системных имен классов.

lpWindowName

[in] Указатель на строку, с символом нуля в конце, которая устанавливает имя окна. Если стиль окна определяет область заголовка, заголовок окна, указанный параметром lpWindowName отображается в заголовке. Когда функция CreateWindow используется, чтобы создать органы управления, типа кнопок, переключателей и статические элементов управления, параметр lpWindowName используют, чтобы задать текст в элементе управления. При создании статического элемента управления со стилем SS_ICON, используйте lpWindowName, чтобы установить имя пиктограммы или идентификатора. Чтобы задать идентификатор, используйте синтаксис «#num».

dwStyle

[in] Определяет стиль создаваемого окна. Этот параметр может быть комбинацией стилей окна, плюс стили органов управления, указанных в разделе Замечаний.

[in] Определяет начальную горизонтальную позицию окна. Для перекрывающего или выскакивающего окна параметр x — начальная x-координата левого верхнего угла окна, в экранных координатах устройства. Для дочернего окна x — x-координата левого верхнего угла окна относительно левого верхнего угла рабочей области родительского окна. Если x установлен как CW_USEDEFAULT, система выбирает заданную по умолчанию позицию для левого верхнего угла окна и игнорирует y параметр. Стиль CW_USEDEFAULT допустим только для перекрывающих окон; если он определен для выскакивающего или дочернего окна параметры x и y устанавливаются в нуль.

y

[in] Определяет начальную вертикальную позицию окна. Для перекрывающего или выскакивающего окна, параметр y — начальная y-координата левого верхнего угла окна, в экранных координатах устройства. Для дочернего окна, y — начальная y-координата левого верхнего угла дочернего окна относительно левого верхнего угла рабочей области родительского окна. Для окна со списком, y — начальная y-координата левого верхнего угла рабочей области окна со списком относительно левого верхнего угла рабочей области родительского окна. Если перекрывающее окно создано с установленным битом стиля WS_VISIBLE, а параметр x установлен как CW_USEDEFAULT, система игнорирует параметр y.

nWidth

[in] Определяет ширину окна в единицах измерения устройства. Для перекрывающих окон nWidth — ширина окна в экранной системе координат или CW_USEDEFAULT. Если nWidth — CW_USEDEFAULT, Система выбирает заданную по умолчанию ширину и высоту для окна; заданная по умолчанию ширина простирается от начальных x-координат до правого края экрана; заданная по умолчанию высота простирается от начальной y-координаты до верхней части области значка. Стиль CW_USEDEFAULT допустим только для перекрывающих окон; если CW_USEDEFAULT определен для выскакивающего или дочернего окна, параметры nWidth и nHeight устанавливаются в нуль.

nHeight

[in] Определяет высоту окна в единицах измерения устройства. Для перекрывающих окон, nHeight — высота окна в экранной системе координат. Если параметр nWidth установлен как CW_USEDEFAULT, Windows игнорирует nHeight.

hWndParent

[in] Дескриптор родительского или владельца создаваемого окна. Допустимый дескриптор окна должен быть дан, когда дочернее или находящееся в собственности окно создаются. Этот параметр необязательный для выскакивающих окон.

Windows 2000/XP: Чтобы создать окно только для сообщения, определите ему флажок HWND_MESSAGE или дескриптор существующего окна только для сообщения.

hMenu

[in] Дескриптор меню или, в зависимости от стиля окна, определяет идентификатор дочернего окна. Для перекрывающего или выскакивающего окна, hMenu идентифицирует меню, которое будет использоваться окном; этот параметр может быть значением ПУСТО (NULL), если будет использовано меню класса. Для дочернего окна, hMenu определяет идентификатор дочернего окна, целочисленное значение, используемое элементом управления диалогового окна, чтобы предупреждать родителя о событиях. Прикладная программа определяет идентификатор дочернего окна; он должно быть уникальным для всех дочерних окон того же самого родительского окна.

hInstance

[in] Windows 95/98/Me: Дескриптор экземпляра модуля, который будет связан с окном.

Windows NT /2000/XP: Это значение игнорируется.

lpParam

[in] Указатель на значение, переданное окну через структуру CREATESTRUCT, вызванную параметром lParam сообщения WM_CREATE. Если прикладная программа вызвала функцию CreateWindow, чтобы создать пользовательское окно MDI, lpParam должен указывать на структуру CLIENTCREATESTRUCT.

Возвращаемые значения

Если функция успешно завершила работу, возвращаемое значение — дескриптор созданного окна.

Если функция завершилась ошибкой, возвращаемое значение — ПУСТО (NULL). Чтобы получить дополнительную информацию об ошибке, вызовите функцию GetLastError.

Эта функция обычно завершается ошибкой по одной из ниже перечисленных причин:

Неправильное значение параметра

Системный класс был зарегистрирован в другом модуле

Hook-точка WH_CBT установлена и возвращает код ошибки

Оконная процедура завершается ошибкой для сообщений WM_CREATE или WM_NCCREATE

Замечания

Функция CreateWindowEx отправляет создаваемому окну сообщения WM_NCCREATE, WM_NCCALCSIZE и WM_CREATE.

Если созданное окно является дочерним окном, его заданная по умолчанию позиция находится внизу Z-последовательности. Если созданное окно — это окно верхнего уровня, его заданная по умолчанию позиция находится вверху Z-последовательность (но ниже всех самых верхних окон, если созданное окно не самостоятельно самое верхнее).

За информацией об управлении показом кнопки для созданного окна на Панели задач, обратитесь к статье Видимость кнопок Панели задач.

Следующие предопределенные классы органов управления могут быть определены в параметре lpClassName.

Класс

Предназначение

BUTTON

(КНОПКА)

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

За таблицей стилей кнопки, которые Вы можете устанавливать в параметре dwStyle, обратитесь к статье Стили кнопки.

COMBOBOX

(КОМБИНИРОВАННОЕ ОКНО)

Обозначает орган управления, состоящий из окна со списком и поля выбора, похожего на окно редактирования текста. При использовании этого стиля, прикладная программа должна или показывать на экране окно со списком все время или включать окно раскрывающегося списка.

Если окно со списком видимо, ввод символов с клавиатуры в поле выбора подсвечивает первую запись окна со списком, которая соответствует вводимым с клавиатуры символам. И, наоборот, при выборе пункта в окне со списком, на экране, в поле выбора, показывается выбранный текст.

Для получения дополнительной информации, см. статью Комбинированные блоки.

Таблицу стилей комбинированного блока, которые Вы можете устанавливать в параметре dwStyle, см. в статье Стили комбинированного блока.

EDIT

(ОКНО РЕДАКТИРОВАНИЯ ТЕКСТА)

Обозначает прямоугольное дочернее окно, внутри которого пользователь может напечатать с клавиатуры текст. Пользователь выбирает орган управления и дает ему фокус клавиатуры, щелкая по нему мышью или перемещая в него, каретку путем нажатия клавиши ТАБУЛЯЦИИ (TAB). Пользователь может вводить текст, когда окно редактирования текста отображает мигающую каретку (caret); используйте мышь, чтобы перемещать курсор, выбирать символы для замены или устанавливать курсор в позицию вставки символов; или используйте клавишу для удаления символов. За большей информацией обратитесь к статье Органы управления редактирования текста.

Таблицу стилей окна редактирования текста, которые Вы можете устанавливать в параметре dwStyle, см. в статье Стили окна редактирования текста.

LISTBOX

(ОКНО СО СПИСКОМ)

Обозначает список строк символов. Этот орган управления определяется всякий раз, когда прикладная программа должна представить список наименований, такой как имена файлов, из которых пользователь может выбирать. Пользователь может выбрать строку, щелкая мышью по ней. Выбранная строка выделяется, а предупреждающее сообщение передается в родительское окно. За большей информацией обратитесь к статье Окна со списком.

Таблицу стилей окна со списком, которые Вы можете устанавливать в параметре dwStyle, см. в статье Стили окна со списком.

MDICLIENT

Обозначает рабочее окно МНОГОДОКУМЕНТНОГО ИНТЕРФЕЙСА (MDI). Это окно принимает сообщения, которые управляют дочерними окнами прикладной программы MDI. Битами рекомендованного стиля являются WS_CLIPCHILDREN и WS_CHILD. Чтобы создать рабочее окно MDI, которое позволяет пользователю листать изображение в дочернем окне MDI, определите стилиWS_HSCROLL и WS_VSCROLL.

За большей информацией обратитесь к статье Многодокументный интерфейс (MDI).

RICHEDIT (ТЕКСТОВЫЙ ПРОЦЕССОР)

Обозначает орган управления Microsoft® Rich Edit 1.0. Это окно позволяет пользователю просматривать и редактировать текст, форматируя символы и параграфы, и может включать внедренные Component Object Model (COM) объекты. За большей информацией обратитесь к статье Текстовые процессоры.

Таблицу стилей текстового процессора, которые Вы можете устанавливать в параметре dwStyle, см. в статье Стили Текстового процессора.

RICHEDIT_CLASS

(КЛАСС ТЕКСТОВОГО ПРОЦЕССОРА)

Обозначает орган управления Rich Edit 2.0. Этот орган управления позволяет пользователю просматривать и редактировать текст, форматируя символы и параграфы, и может включать в себя внедренные объекты COM. Для получения дополнительной информации, см. статью Текстовые процессоры.

Таблицу стилей текстового процессора, которые Вы можете устанавливать в параметре dwStyle, см. в статье Стили Текстового процессора.

SCROLLBAR

(ЛИНЕЙКА ПРОКРУТКИ)

Обозначает прямоугольник, который содержит бегунок и имеет стрелки направленные в оба конца. Линейка прокрутки отправляет предупреждающее сообщение своему родительскому окну всякий раз, когда пользователь щелкает мышью по органу управления. В случае необходимости, родительское окно ответственно за модификацию позиции бегунка. За большей информацией обратитесь к статье Линейки прокрутки.

Таблицу стилей линеек прокрутки, которые Вы можете устанавливать в параметре dwStyle, см. в статье Стили Линейки прокрутки.

STATIC

(СТАТИЧЕСКИЙ ЭЛЕМЕНТ)

Обозначает простое текстовое поле, окно или прямоугольник, используемый для надписей, окно или другие отдельные органы управления. Статические элементы управления не получают никакой вводимой информации и не предоставляют никакой выводимой информации. За большей информацией обратитесь к статье Статические органы управления.

Таблицу стилей линеек прокрутки, которые Вы можете устанавливать в параметре dwStyle, см. в статье Стили Статических органов управления.

Функция LoadLibrary

function LoadLibrary (LibFileName: PChar): THandle;

Загpужает поименованный модуль библиотеки.

Паpаметpы:

LibFileName: Имя файла библиотеки (заканчивающееся пустым символом).

Возвpащаемое значение: В случае успешного завеpшения — идентификатоp экземпляpа модуля библиотеки (значение, больше 32); если нет, то его значение меньше 32 и является одним из следующих: (0) нет памяти; (5) попытка связать задачу; (11) невеpный файл EXE; (12) пpикладная задача из OS/2; (13) пpикладная задача из DOS 4. 0; (14) невеpный тип EXE; (15) незащищенный pежим.

Функция находится в файле kernel32. dll.

Функция PostMessage

function PostMessage (Wnd: HWnd; Msg, wParam: Word; lParam: Longint): Bool;

Напpавляет сообщение окну пpикладной задачи.

Паpаметpы:

Wnd: Окно, котоpое будет пpинимать сообщение, или $FFFF для всех пеpекpываемых или всплывающих окон.

Msg: Тип сообщения.

wParam: Дополнительная инфоpмация о сообщении.

lParam: Дополнительная инфоpмация о сообщении.

Возвращаемое значение: не нуль в случае успешного завеpшения; 0 — если нет.

Функция находится в файле user32. dll.

Функция DialogBoxParam

function DialogBoxParam (Instance, THandle; TemplateName: PChar; Parent: HWnd; DialogFunc: TFarProc; InitParam: Longint): Integer;

Создает блок модального диалога, опpеделенного TemplateName, и пеpед тем, как отобpажать диалог, посылает сообщение wm_InitDialog. Также позволяет пеpедавать функции обpатного вызова начального паpаметpа.

Паpаметpы:

Instance: Экземпляp модуля, исполнимый файл котоpого содеpжит шаблон блока диалога.

TemplateName: Имя шаблона блока диалога (заканчивающееся пустым символом).

Parent: Окно владельца.

DialogFunc: Адpес экземпляpа пpоцедуpы функции диалога.

InitParam: Пеpедается в паpаметpе lParam сообщения wm_InitDialog.

Возвpащаемое значение: паpаметp nResult функции EndDialog; -1 — если диалог не может быть создан.

Функция находится в файле user32. dll.

Функция ExitProcess

function ExitProcess (uExitCode);

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

Параметры:

uExitCode Определяет код выхода для процесса, и для всех потоков, которые завершают работу в результате вызова этой функции.

Возвpащаемое значение: у этой функции нет возвращаемого значения.

Функция FreeLibrary

function FreeLibrary (LibModule: THandle);

Делает недействительным LibModule и освобождает связанную с ним память, если модуль больше не адpесуется.

Паpаметpы:

LibModule: Загpуженный библиотечный модуль.

Возвращаемые значение: если функция завершается успешно, возвращаемое значение не нуль. Если функция завершается ошибкой, возвращаемое значение равняется нулю.

Функция находится в файле kernel32. dll.

Функция EndDialog

function EndDialog (Dlg: Hwnd; Result: Integer);

Теpминиpует модальный блок диалога. Значение, указанное паpаметpом esult, возвpащается в создающую функцию DialogBox.

Паpаметpы:

Dlg: Уничтожаемый диалог.

Result: Возвpащаемое значение.

Возвращаемые значение: если функция завершается успешно, возвращаемое значение отлично от нуля. Если функция не выполняет задачу, возвращаемое значение нулевое.

Функция находится в файле user32. dll

Функция GetProcAddress

function GetProcAddress (Module: THandle; ProcName: PChar): TFarProc;

Считывает адpес экспоpтиpованной библиотечной функции.

Паpаметpы:

Module: Библиотечный модуль.

ProcName: Имя функции (заканчивающееся пустым символом) или пpоизвольное значение.

Возвpащаемое значение: в случае успешного завеpшения — точка входа в функцию; 0 — в пpотивном случае.

Функция находится в файле kernel32. dll.

Текст программы

kurs. asm

. 386

. model flat, stdcall

option casemap: none

WinMain proto: DWORD: DWORD:DWORD:DWORD

include masm32includewindows. inc

include masm32includeuser32. inc

include masm32includekernel32. inc

include masm32includeadvapi32. inc

include masm32includeshell32. inc

includelib masm32libuser32. lib

includelib masm32libkernel32. lib

includelib masm32libadvapi32. lib

includelib masm32libshell32. lib

data

ClassName db «SimpleWinClass», 0

AppName db «Курсовая работа ОС Малюшко Д. А. «, 0

MenuName db «FirstMenu», 0

ButtonClassName db «button», 0

ButtonText1 db «Скрыть ПЗ», 0

ButtonText2 db «Показать ПЗ», 0

ButtonText3 db «Текущий пользователь», 0

ButtonText4 db «Открыть Яndex», 0

ButtonText5 db «Помигать», 0

ButtonText6 db «WINDOWS», 0

shell db «Shell_TrayWnd», 0; это имя класса панели задач

hCap db «WindowsDirectory», 0

lpPage db «http: //www. ya. ru», 0

lpOperation db «open», 0

capt db «Текущий пользователь», 0; терминирующий символ

nSize dd NULL

data?

hInstance HINSTANCE ?

CommandLine LPSTR ?

hwndButton HWND ?

hwndEdit HWND ?

buffer db 512 dup (?)

; buffer to store the text retrieved from the edit box

lpUsername db 512 dup (?)

const

ButtonID1 equ 1001

; The control ID of the button control

ButtonID2 equ 1002

ButtonID3 equ 1003

ButtonID4 equ 1004

ButtonID5 equ 1005

ButtonID6 equ 1006

. code

start:

invoke GetModuleHandle, NULL

mov hInstance, eax

invoke GetCommandLine

mov CommandLine, eax

invoke WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT

invoke ExitProcess, eax

WinMain proc hInst: HINSTANCE, hPrevInst: HINSTANCE, CmdLine: LPSTR, CmdShow: DWORD

LOCAL wc: WNDCLASSEX

LOCAL msg: MSG

LOCAL hwnd: HWND

mov wc. cbSize, SIZEOF WNDCLASSEX

mov wc. style, CS_HREDRAW or CS_VREDRAW

mov wc. lpfnWndProc, OFFSET WndProc

mov wc. cbClsExtra, NULL

mov wc. cbWndExtra, NULL

push hInst

pop wc. hInstance

mov wc. hbrBackground, COLOR_BTNFACE+1

mov wc. lpszMenuName, OFFSET MenuName

mov wc. lpszClassName, OFFSET ClassName

invoke LoadIcon, NULL, IDI_APPLICATION

mov wc. hIcon, eax

mov wc. hIconSm, eax

invoke LoadCursor, NULL, IDC_ARROW

mov wc. hCursor, eax

invoke RegisterClassEx, addr wc

invoke CreateWindowEx, WS_EX_CLIENTEDGE, ADDR ClassName,

ADDR AppName, WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, CW_USEDEFAULT,

300,200,NULL, NULL, hInst, NULL

mov hwnd, eax

invoke ShowWindow, hwnd, SW_SHOWNORMAL

invoke UpdateWindow, hwnd

. WHILE TRUE

invoke GetMessage, ADDR msg, NULL, 0,0

. BREAK. IF (!eax)

invoke TranslateMessage, ADDR msg

invoke DispatchMessage, ADDR msg

. ENDW

mov eax, msg. wParam

ret

WinMain endp

WndProc proc hWnd: HWND, uMsg: UINT, wParam: WPARAM, lParam: LPARAM

. IF uMsg==WM_DESTROY

invoke PostQuitMessage, NULL

. ELSEIF uMsg==WM_CREATE

invoke CreateWindowEx, NULL, ADDR ButtonClassName, ADDR ButtonText1,

WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,

5,0,100,25,hWnd, ButtonID1, hInstance, NULL

invoke CreateWindowEx, NULL, ADDR ButtonClassName, ADDR ButtonText2,

WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,

5,35,100,25,hWnd, ButtonID2, hInstance, NULL

invoke CreateWindowEx, NULL, ADDR ButtonClassName, ADDR ButtonText3,

WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,

5,65,180,25,hWnd, ButtonID3, hInstance, NULL

invoke CreateWindowEx, NULL, ADDR ButtonClassName, ADDR ButtonText4,

WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,

5,95,180,25,hWnd, ButtonID4, hInstance, NULL

invoke CreateWindowEx, NULL, ADDR ButtonClassName, ADDR ButtonText5,

WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,

150,0,100,25,hWnd, ButtonID5, hInstance, NULL

invoke CreateWindowEx, NULL, ADDR ButtonClassName, ADDR ButtonText6,

WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,

5,125,100,25,hWnd, ButtonID6, hInstance, NULL

mov hwndButton, eax

. ELSEIF uMsg==WM_COMMAND

mov eax, wParam

. IF ax==ButtonID1

shr eax, 16

. IF ax==BN_CLICKED

invoke FindWindow, addr shell, NULL; получение хэндла панели задач

. if eax ≠ 0

invoke ShowWindow, eax, SW_HIDE; скрыть панель задач

. endif

. ENDIF

. ELSEIF ax==ButtonID2

shr eax, 16

. IF ax==BN_CLICKED

invoke FindWindow, addr shell, NULL; получение хэндла панели задач

. if eax ≠ 0

invoke ShowWindow, eax, SW_SHOW; показать панель задач

. endif

. ENDIF

. ELSEIF ax==ButtonID3

shr eax, 16

. IF ax==BN_CLICKED

mov nSize, 512

Invoke GetUserName, addr lpUsername, addr nSize

Invoke MessageBox, hWnd, addr lpUsername, addr capt, MB_OK

. ENDIF

. ELSEIF ax==ButtonID4

shr eax, 16

. IF ax==BN_CLICKED

invoke ShellExecute, hWnd, addr lpOperation, addr lpPage, NULL, NULL, SW_SHOWNORMAL

. ENDIF

. ELSEIF ax==ButtonID5

shr eax, 16

. IF ax==BN_CLICKED

invoke FlashWindow, hWnd, TRUE; помигать заголовком

. ENDIF

. ELSEIF ax==ButtonID6

shr eax, 16

. IF ax==BN_CLICKED

invoke GetWindowsDirectory, addr buffer, sizeof buffer; сохранение директории Windows в буфере

invoke MessageBox, hWnd, addr buffer, addr hCap, MB_OK or MB_ICONINFORMATION

. ENDIF

. ENDIF

. ELSE

invoke DefWindowProc, hWnd, uMsg, wParam, lParam

ret

. ENDIF

xor eax, eax

ret

WndProc endp

end start

Результат работы

Основное окно программы

Текущий пользователь

Вывод

В ходе данной курсовой работы были освещены основы 32-битного программирования на языке Assembler для ОС WINDOWS.

В приведённой программе для вызова API функций используется функция invoke, которая позволяет намного сократить текст программы и делает программы на языке ассемблера похожими на программы на ЯВУ

Компилятор MASM32, ОС Windows 7 SP1.

функция программа invoke

Список литературы

«WinAPI по-русски — справочник по функциям WinAPI», URL http: //develab. narod. ru/api/06. htm#9, (дата обращения 23. 04. 14).

«Win32 API и ассемблер», URL http: //www. ironahot. idknet. com/ (дата обращения 23. 04. 14).

«Динамически подключаемая библиотека», URL http: //ru. wikipedia. org/wiki/%C4%E8%ED%E0%EC%E8%F7%E5%F1%EA%E8_%EF%EE%E4%EA%EB%FE%F7%E0%E5%EC%E0%FF_%E1%E8%E1%EB%E8%EE%F2%E5%EA%E0, (дата обращения 23. 04. 14).

Пирогов В. Ю. «Ассемблер для Windows» -- М.: Издатель Молгачева С. В., 2002. --552 с., ил.

ПоказатьСвернуть
Заполнить форму текущей работой