- Api do windows vb6
- API функции языка Visual Basic
- Теория по API функциям Visual Basic
- Применение API функций на практике
- Вот небольшой перечень стандартных библиотек DLL Windows:
- Вот самый малый список функций, которые используются в Visual Basic:
- Примеры работы с реестром
- Для чтения строкового параметра используйте функцию GetRegString
- Для чтения параметра DWORD GetRegDWord
- Для записи строкового параметра используется SetRegString
- Для записи параметра типа DWORD используется SetRegDWord
- Для удаления ключа из реестра используется функция DeleteRegKey
- Для удаления параметра из реестра используется функция DeleteRegValue
Api do windows vb6
Вступление . Дорогой друг. Перед тобой попытка сделать максимально понятное и доступное пособие по API-функциям, чтобы даже совершенно неопытный программист мог использовать их в своих программах. Попытка эта может быть неудачной, но тем не менее в главах 2-й части самоучителя ты найдешь полезные сведения и приемы работы с API. Идея реализации этого не нова — разбор примеров с API с очень простым и ясным кодом. Однако общая концепция построения самоучителя будет корректироваться в процессе работы.
Хочу предупредить, что все примеры написаны и проверены под Windows XP Professional. Использование API в данном пособии предполагает использование 32-разрядных платформ (Windows 98/2000/NT/XP) и совместимых с Visual Basic 4.0 и выше.
Для чего вообще париться с API? Желание примененить API (Application Programming Interface), как мне кажется, в первую очередь предполагает возникновение у программиста задачи, которую невозможно реализовать внутренними возможностями VB. И второе — это просто интерес к API и тому, что можно сделать с помощью Windows — так сказать, спортивный интерес.
Можно, конечно, написать программу, состоящую чуть-ли не из одних API. Однако, как мне кажется, если есть возможность решить задачу средствами VB, то и нефиг пыжится с API. Тем более, что для многих функций API есть аналоги, уже встроенные в Visual Basic.
Использование API очень тесно связано с внутренним устройством Windows. Впрочем как и сам Visual Basic. Но в VB мы этого не замечаем, эта замечательная программа берет на себя почти все вопросы по «утряске» работы твоего приложения с твоей операционной системой. Совсем другое дело при работе с API. Хотя бейсик здесь тоже пытается не допустить фатальных ситуаций, вероятность возникновения трудноуловимых ошибок здесь гораздо выше. Хотя при правильном использовании API они достаточно надежны. Но и здесь возможно явное столкновение с извращениями компании Microsoft.
Данное пособие не ставит собой целью фундаментально изучать ее операционную систему. Да мы вообще ничего не изучаем,а так, балуемся. Поэтому, чтобы не туманить себе мозги мы будем по ходу использовать лишь крайне необходимые и вобщем-то общеизвестные сведения о Windows.
Что такое API и откуда они берутся? Ниоткуда они не берутся. Они есть на твоем компьютере, независимо от того, используем мы их или нет. Это просто функции, которые возвращают определенные значения. И все приложения Windows их постоянно используют для выполнения типовых задач. Физически они находятся в особых исполняемых файлах с расширенем .dll, которые называются библиотеками динамической связи. По большому счету мы можем использовать эти функции также, как и встроенные функции VB.
Вообще-то не все API могут быть вызваны из VB, так как их параметры несовместимы с Visual Basic. Все API написаны на языке C — чуждого по синтаксису и структуре языку VB. VB прост как носок, С — сложен как портянка. Именно поэтому объявления API-функций так неорганично вписываются в VB. Однако это никого не останавливает в их использовании.
Так как их использовать? А использование API начинается с их объявления. Неправильные объявления являются причиной большинства ошибок. Объявлять их предпочтительнее в стандартном модуле с ключевым словом Public, хотя, если проект простой, можно объявить их и в форме. Никогда не пиши объявления с клавиатуры. Копируй функцию из файла Win32API.txt или других надежных источников. Это сократит возможность появления ошибок в объявлении до минимума.
Сложно ли работать с API? Конечно, написанные в коде подряд тридцать-сорок объявлений API вызывают суеверный ужас обилем непонятных и общем-то странных циферок и буковок, которые никак не ассоциируются с VB. Однако при ближайшем рассмотрении каждой функции отдельно все выглядит не так страшно. Структура большинства функций более или менее одинакова и их применение потом вобщем-то тоже. Использование API по большому счету не представляет особых трудностей. Конечно здесь есть свои подводные камни и рифы и иногда мы результата-то не можем получить, а иногда и вообще повесим программу. Ну это издержки всякого программирования.
Давай посмотрим, из чего, приблизительно, состоит объявление API. Вот ее синтаксис:
Public/Private Declare Function Имя_функции Lib Библиотека Alias Псевдоним (Список_аргументов) As Тип
где синим цветом выделен «скелет» объявления:
Public/Private — понятно, что ключевые слова. В коде формы функция объявляется с ключевым словом Private, в стандартном модуле — с Public, или вовсе без ключевого слова (но при этом использование функции будет возможно только в модуле).
Declare Function — команда, которая собственно объявляет функцию
Имя_функции — определяет то имя функции, с которым мы будем в дальнейшем работать в коде программы
Библиотека — определяет имя DLL-библиотеки (по сути имя файла), содержащей функцию
Псевдоним — как-бы второе имя функции, псевдоним, который можно использовать в VB, если Имя_функции по каким-то причинам (несовместимость синтаксиса, совпадение с именами команд и функций VB) не может быть использовано. Имеется не всегда.
(Список_аргументов) — это переменные строго определенного типа, которые мы передаем или получаем. Их имена для нас не имеют особого значения, поскольку мы все равно в программе используем свои.
Тип — тип значения, которое возвращает наша функция, а именно Byte, Long, Boolean, Integer, Single, Double, Currency, Date, String, Object, Variant. В объявлении определять тип возвращаемого значения можно и с помощью значка определителя типа (например типу Integer соответствует значок %), тогда секция Тип не нужна. Подробнее типы данных ты можешь посмотреть на странице «Типы данных, поддерживаемые VB».
Но на самом деле, из всего этого обилия, нам главным образом нужно Имя_функции , чтобы обратиться к нему в нашей программе и порядок и тип переменных в Списке_аргументов .
Реально же объявление функции GetWindowText, позволяющей получить заголовок окна будет выглядеть в соответствии с файлом Win32API.txt следующим образом:
Public Declare Function GetWindowText Lib «user32» Alias «GetWindowTextA» (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
А если использовать значок определителя типа, то так:
Public Declare Function GetWindowText & Lib «user32» Alias «GetWindowTextA» (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long)
Обратите внимание, что библиотека имеет только имя файла, без расширения .dll. Такое написание возможно только при использовании основных DLL (User32, Kernel32, и GDI32). В остальных случаях использование расширения dll в имени библиотеки обязательно.
Теперь, чтобы нам никогда-никогда не делать ошибок в объявлении API, научимся пользоваться справочным файлом Win32API.txt.
Добавление API в проект. |
Исходя из того, что правильное объявление API является залогом нашего успеха, нам надо знать, где найти правильное объявление функции и откуда его скопировать. В стандартную поставку VB6 включен файл Win32API.txt. В нем имеются все объявления, константы и пользовательские типы. Но если ты откроешь его в текстовом редакторе, то офигеешь и сразу закроешь (можешь попробовать, он лежит обычно в C:\Program Files\Microsoft Visual Studio\Common\Tools\Winapi). Но нас простым финским ножом не испугаешь, поэтому мы хладнокровно воспользуемся утилитой API Viewer. И с ее помощью сможем очень быстро и легко находить и копировать объявления API-функций.
Сейчас мы попробуем практически этой утилитой добавить функцию в наш проект, а заодно эту самую утилиту настроим.
Для добавления утилиты в VB начните новый exe-проект и создайте в нем стандартный модуль Модуль1. Откройте модуль. В меню VB «Добавления» (Add-Ins) шелкните по «Менеджеру Дополнений» (Add-In Manager) рис.1.
Рисунок 1
У тебя появится «Менеджер Дополнений», в котором надо выбрать строку VB 6 API Viewer. Не забудь поставить две галочки «Загружено/Выгружено» и «Загрузить при запуске» (рис. 2). Тогда у тебя при каждом запуске VB будет присутствовать эта утилита. А поскольку ты читаешь эту главу, значит решился взяться за API всерьез, и эта утилита должна стать твоей любимой.
Рисунок 2.
После этих манипуляций у тебя в меню «Добавления» появится новая строка «API Viewer» (Рис.3). Вот по ней и щелкни.
Рисунок 3.
И перед тобой открывается искомая, замечательная утилита. Однако в нее надо загрузить этот самый файл Win32API.txt, чтоб было, на что посмотреть. Выбери в меню File строку Load Text File и в открывшемся окне найди этот файл. Теперь, естественно, жми Open. В поле Available Items у тебя появился список доступных API. Если нам надо, например, записать в наш проект функцию GetDesktopWindow, то мы в поле Type the first. пишем, конечно, первые буквы функции (getdes) и вот она, выехала, прямо перед нами. Щелкаем по кнопке Add и полное объявление функции появляется в поле Selected Items (рис 4). Жмем кнопку Copy (при этом объявление забирается в буфер), а потом особо не напрягаясь Insert. У тебя даже спросят, в Модуль1.bas ли надо вставлять функцию. Ты жмешь OK и у тебя в модуле готовое правильное объявление. Заметьте, что мы объявляем функцию в модуле, поэтому с ключевым словом Public (помечена строка Public). А вот если бы мы объявляли функцию в форме, то надо было бы пометить строчку Private.
Рисунок 4.
Ну тут можно добавить, что для быстроты поиска можно преобразовать текстовой файл в базу (.mdf), но тогда и грузить надо базу («Load Database File»). А еще, для того, чтобы последний файл грузился автоматически, поставь галочку в меню View в строке «Load Last File».
Ну вот теперь мы полностью готовы к исследованию API, которое начнется в следующей статье.
API функции языка Visual Basic
Пришло время поговорить о таком понятии как API функции в языке Visual Basic. Чем же важны эти функции в Visual Basic? Давайте разберемся, во-первых, когда Вы начнете программировать на Visual Basic, Вы сразу же поймете, что с использованием этих функций можно написать очень серьезные программы, во-вторых, просто многое нельзя сделать без использования API функций, например, практически все что связанно с использованием операционной системы Windows (например: узнать имя пользователя, место на жестком диске и так далее).
Но для того чтобы начать применять на практике эти функции, Вам нужно знать, что они из себя представляют, давайте поговорим сначала об этом.
Теория по API функциям Visual Basic
API – это аббревиатура Application Programming Interface (интерфейс прикладного программирования). Другими словами, API – это набор функций, которые сама операционная система дает программисту для использования их в своих программах. С помощью API программисты легко реализуют свои задумки на практике.
API функции могут вызываться из Visual Basic для выполнения задач, для которых недостаточно стандартного программного кода Visual Basic. Например, стандартные средства Visual Basic не позволяют выключить компьютер или перезагрузить его. Однако все это можно легко сделать через обращение к соответствующей функции API.
Практически все функции, которые располагаются в Windows — находятся внутри DLL (Dynamic Link Library). Все dll-файлы расположены в системной папке Windows. Существует свыше 1000 функций API, которые условно делятся на четыре основные категории.
- Работа с приложениями — запуск и закрытие приложений, обработка команд меню, перемещения и изменения размера окон;
- Графика — создание изображений;
- Системная информация — определение текущего диска, объем памяти, имя текущего пользователя и т.д.;
- Работа с реестром — манипуляции с реестром Windows.
Применение API функций на практике
Теперь перейдем непосредственно к использованию этих функций на практике. Функции API, вызываемые в Visual Basic, должны быть сначала объявлены. При объявлении указывается имя DLL и функции, а также информация о количестве и типе аргументов.
Процедуры DLL объявляются командой Declare в секции General Declarations модуля формы или стандартного модуля:
Процедуры DLL, находящиеся в стандартных модулях, по умолчанию являются открытыми и могут вызываться из любой точки приложения. Процедуры, объявленные в модуле формы, являются закрытыми и перед их объявлением должно стоять ключевое слово Private.
Секция Lib сообщает, где следует искать файл DLL, содержащий функцию. При ссылке на основные библиотеки Windows (user32.dll, kernel32.dll, gdi.dll) расширение включать не обязательно.
Если путь к файлу не указан, то начинается просмотр каталогов в следующей последовательности
- Каталог, содержащий EXE-файл программы;
- Текущий каталог;
- Системный каталог Windows;
- Каталог Windows;
- Переменная окружения Path.
Вот небольшой перечень стандартных библиотек DLL Windows:
- advapi.dll — защита NT,реестр и другие продвинутые сервисы;
- comdlg.dll — стандартные диалоговые окна;
- gdi.dll — интерфейс графических устройств;
- kernel32.dll — память, диски, процессы, ресурсы;
- mpr.dll — сети;
- netapi32.dll — библиотека сетевого API;
- shell32.dll — оболочка Windows, drag-and-drop ,выборка значков;
- user32.dll — пользовательский интерфейс-окна, меню, строки, сообщения;
- version.dll — контроль версий;
- winmm.dll — мультимедиа, звук, джойстики, таймеры;
- winspoll.dll — диспетчер печати.
Большинство процедур DLL за документировано с использованием нотации языка программирования C и C++. Для успешного преобразования функции API в команду Declare необходимо разбираться в механизме передачи аргументов. Обычно аргументы передаются по значению. В этом случае перед именем аргумента ставится ключевое слово ByVal. Если аргумент передается по ссылке, то ставится ByRef.
Вот самый малый список функций, которые используются в Visual Basic:
- BitBlt — копирует изображение из одного hDC в другой;
- ExitWindowsEx — перезагрузка или выход из Windows;
- FindWindow — находит Handle окна с указанным Caption;
- GetCursorPos — возвращает текущую позицию курсора мыши (глобально);
- GetDriveType — возвращает тип накопителя;
- GetForegroundWindow — возвращает Handle активного окна;
- SetCursorPos — устанавливает новую позицию курсора мыши;
- SetVolumeLabel — изменяет метку диска;
- SetWindowPos — устанавливает позицию окна с определённым Handle (также с помощью этой функции можно сделать так, чтобы окно было ПОВЕРХ всех;
- ShellExecute — запускает приложение, ассоциированное с расширением, которое имеет указанный файл (также может просто запустить указанное приложение);
- ShowCursor — скрывает или показывает курсор мыши на экране.
Примеры работы с реестром
Также при программировании на Visual Basic, да и на других языках возникает проблема, когда нужно использовать реестр Windows, но с помощью api функций это сделать легко, например:
Для чтения строкового параметра используйте функцию GetRegString
Для чтения параметра DWORD GetRegDWord
Для записи строкового параметра используется SetRegString
Если ключ или параметр не были созданы, то они будут созданы, если ключ или параметр уже существуют, то новые значения запишутся поверх старых.
Для записи параметра типа DWORD используется SetRegDWord
Для удаления ключа из реестра используется функция DeleteRegKey
Второй параметр — Ключ-родитель
Третий параметр — True — если требуется подтверждение на удаление или False — если подтверждение не требуется.
Для удаления параметра из реестра используется функция DeleteRegValue
На самом деле возможности API функций в операционной системе Windows практически безграничны. Давайте закончим на этом рассмотрение этой возможности Visual Basic и напоследок напишем небольшую программку с использованием API функций.
Данная программа просто выводит сообщение на экран, вставьте следующий код:
Мы здесь использовали 4 функции (BeginPath, EndPath, PathToRegion, SetWindowRgn), которые располагаются в двух dll библиотеках (gdi32, user32).