Введение в Win32 API |
Автор Бельбаков Александр | ||||||||||||||||||||||||||||
05.10.2001 г. | ||||||||||||||||||||||||||||
Статья для новичков в разработке Windows приложений с использованием API функций, короче - для тех, кто не знаком с Win32 API.
После того, как Вы освоились с возможностями Visual Basic, разрабатываете приложение и, вдруг, требуется обратиться непосредственно к самой системе и иё функциям? Например, чтобы получить координаты мыши за пределами вашей формы. Доступ к этим функциям предоставляется интерфейсом прикладных программ - Win32 API (Application Programming Interface). Win32 API - это набор функций, используемых программистами, работающими на языке C. Но в Visual Basic'е траблов с API нет (я не сталкивался, хотя, в руководстве Апплемана по API есть некоторые упоминания). Проблемы у новичков с API функциями должно вызывать описание самих функций и объявлений типов данных, т.к. я уже говорил, что функции ориентированы на C. Цель этой статьи - ознакомление с основами обращений к API. Для просмотра и объявления основных функций можно воспользоваться API Viewer'ом. Основные функции находятся в файле Win32API.txt. Существуют дополнительные файлы, ориентированные для более широкой работы с API. Скачать с сайта можно здесь. Для использования API функции необходимо сообщить VB имя и местоположение DLL библиотеки, в которой находится нужная функция, указать типы и параметры. Для объявления функции используется оператор Declare. Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As LongDeclare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long API функция GetUserName находится в библиотеке advapi32.dll, в системной папке Windows. Суффикс A - это наследство, оставшееся от старых версий API, в которых существовали 16 и 32-х разрядные функции. Ниже приведена таблица структуры данных на C и эквивалентов на VB.
Когда параметры передаются по значению, вызываемая процедура работает с локальными копиями переменных. Процедура получает их значения, но не может изменить значение самой переменной. В Visual Basic'е для обозначения такого способа передачи используют слово ByVal. При выходе из процедуры исходное значение переменной восстанавливается. При передаче параметров по ссылке процедуре предоставляется доступ к переменной в вызывающей программе, процедура получает адрес области памяти, хранящей значение параметра. Это даёт возможность изменять значение параметра. В некоторых API функциях в качестве параметров используются структуры. Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long Private Type POINTAPI x As Long y As Long End Type Эта функция используется для определения информации о положении курсора мышки. Она должна возвращать значения X и Y. Эти значения находятся в структуре POINTAPI. Чтобы получить их значения воспользуйтесь следующим кодом: Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long Private Type POINTAPI x As Long y As Long End Type Private Sub MouseTmr_Timer() 'таймер с интервалом 100 Dim Cords as POINTAPI GetCursorPos Cords Caption = "X: " & Cords.x & " , Y: " & Cords.Y End Sub Вот вроде бы и всё. |