Программа для вызова API функций
Описание функций, использующихся в программах. Основы 32-битного программирования на языке Assembler для ОС WINDOWS. Использование функции invoke, которая позволяет намного сократить текст программы и делает приложения похожими на программы для "ЯВы".
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 20.02.2015 |
Размер файла | 252,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
Введение
Свыше 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 \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\advapi32.inc
include \masm32\include\shell32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\advapi32.lib
includelib \masm32\lib\shell32.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 с., ил.
Размещено на Allbest.ru
Подобные документы
Описание использованного набора макросредств. Список использованных констант и структур. Основы вызова API-функций. Основы программирования на 32-битном ассемблере. Формирование объектного кода, содержащего текст исходной программы в машинном виде.
курсовая работа [150,4 K], добавлен 18.05.2014Основы программирования на 32-битном Ассемблере, разработка с его помощью программы, демонстрирующей работу одного из разделов ОС Windоws. Описание используемых АРI-функций как интерфейса программирования приложений. Листинг программы, результаты работы.
курсовая работа [164,5 K], добавлен 18.05.2014Программирование в операционной системе Windows. Работа с потоками и процессами ОС. Методы их создания. Основы вызова API-функций. Пример создания диалогового окна без использования файла ресурсов. Разработка программы с помощью 32-битного ассемблера.
курсовая работа [107,6 K], добавлен 18.05.2014Описание используемых функций и директивы Invoke: get module handle, get command line, win main, exit process, load menu. Архитектура OpenGL, основные задачи. Текст программы: краткое описание, opengl.inc, opngl.asm. Результаты выполнения программы.
курсовая работа [215,6 K], добавлен 18.05.2014Создание приложения, исполняющего трансляцию программы из языка Паскаль в язык Си: разработка алгоритма реализации задачи, описание необходимых констант, переменных, функций и операторов, представление листинга программы и распечатка результатов.
курсовая работа [305,9 K], добавлен 03.07.2011Техника создания графики при помощи API функций, экспортируемых библиотекой GDI32.DLL. Разработка на языке программирования С++ в среде программирования Microsoft Visual C++ программы для отображения часов реального времени в цифровом и аналоговом виде.
курсовая работа [2,8 M], добавлен 27.01.2010Основы программирования в операционной системе Windows. Создание процессов в 32-битных операционных системах. Основное отличие дескриптора от идентификатора. Понятие критической секции. Основы вызова API-функций. Методы многозадачного программирования.
курсовая работа [501,1 K], добавлен 18.05.2014Основные функции библиотеки динамической компоновки (DLL) в операционной системе Windows. Характеристика механизмов связывания в среде Windows. Описание функций, использующихся в программах. Анализ примеров реализации DLL. Процесс использования ресурсов.
курсовая работа [365,3 K], добавлен 18.05.2014Разработка клиент-серверного приложения под управлением Windows на языке программирования Delphi, реализующего функции дистанционного обучения (тесты). Основная форма программы, которая состоит из меню, панели активации пользователя и панели чата.
курсовая работа [4,3 M], добавлен 15.04.2019Использование DirectX для решения задач по выводу и обработке графики в Microsoft Windows. Описание используемых DirectX-функций. Исходный текст отлаженной программы. Техника работы с окнами. Результаты работы программы, составление алгоритма, листинг.
контрольная работа [226,0 K], добавлен 18.05.2014