eXcellence-team eXcellence

Win32 API в VBA

Win32 API - это функции, которые находятся в библиотеках Windows. Все программирование под Windows, неважно на каком языке, в конце концов сводится к вызову этих функцмй. Когда вы используете MsgBox на Visual Basic, вы вызываете функцию-оболочку в интерпретаторе. На самом деле будет вызвана фукнция WinAPI MessageBoxA, показывающая диалоговое окно. Функции WinAPI можно вызывать и напрямую, без помощи встроенных средств языка. Реализации API в разных версиях Windows отличаются. Некоторые функции могут не работать в Windows 98 или 95. Подробную информацию о каждой функции и ее параметрах можно найти в MSDN.

Для того, чтобы использовать функции Win 32 API их необходимо объявить, используя оператор Declare.

Declare Function GetCurrentDirectory Lib "kernel32" Alias "GetCurrentDirectoryA" (ByVal buffer As String, ByVal nSize As Long) As Long

Таким образом мы объявили функцию GetCurrentDirectory, которая возвращает текущий каталог.

Рассмотрим синтаксис оператора Declare подробнее. Есть два варианта синтаксиса: для функции и для процедуры. (то что в скобках необязательно)

[Public или Private] Declare Sub имя_процедуры lib "имя_динамической_библиотеки" [Alias "псевдоним"] [(параметры)]

[Public или Private] Declare Function имя_функции lib "имя_динамической_библиотеки" [Alias "псевдоним"] [(параметры)] [as тип возврата]

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

Пример использования:

Sub APIDemo()
  Dim TextBuffer As String
  Dim TextLen As Long
  TextBuffer = String(256, 0)
  TextLen = GetCurrentDirectory(TextBuffer, Len(TextBuffer))
  TextBuffer = Left(TextBuffer, TextLen)
  MsgBox (TextBuffer)
End Sub

Объявляем переменные. TextBuffer = String(256, 0) - строка длиной 256 символов, заполненная нулями. В результате выполнения функции получаем длину строки в TextLen и саму строку в TextBuffer. Строка будет в формате C, поэтому обрезаем лишние нулевые символы функцией Left.