Основы офисного программирования и язык VBA


Обработка ошибок, возникающих при вызове функций Win32 API - часть 2


Давайте вернемся к этому примеру и попробуем обработать эту ошибку. В раздел объявлений ранее созданного модуля Unicode мы добавили объявление констант и функций и теперь он выглядит так:

Option Explicit

Public Const ERROR_INVALID_NAME = 123&

'Объявление вызываемых функций Public Declare Function FindWindowA Lib "user32" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 'Функции в Unicode кодировке 'Тип string заменен на Any. Передача аргумента по ссылке Public Declare Function FindWindowW Lib "user32" _ (lpClassName As Any, lpWindowName As Any) As Long

Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextW" _ (ByVal hwnd As Long, lpString As Any, ByVal cch As Long) As Long

Public Declare Function SetWindowText Lib "user32" Alias "SetWindowTextW" _ (ByVal hwnd As Long, lpString As Any) As Long

Public Declare Function GetActiveWindow Lib "user32" () As Long

Public ArCapt() As Byte 'Объявление динамического массива

Приведем теперь процедуру, в которой вызывается функция FindWindowW, приводящая к ошибке периода выполнения:

Public Sub WorkWithApiErr() Dim Res As Long Dim capt As String 'Заголовок Dim HandleW As Long 'Описатель окна

'Поиск окна по заголовку capt = "DocOne6 - Microsoft Word" ArCapt = capt & vbNullChar Debug.Print ArCapt HandleW = FindWindowW(0&, ArCapt(0)) If HandleW > 0 Then 'OK Debug.Print HandleW Else: MsgBox ("Не могу корректно вызвать UniCode FindWindowW") If Err.LastDllError = ERROR_INVALID_NAME Then Debug.Print "Не корректно задано имя при вызове Unicode FindWindowW функции!" End If End If 'Еще один эксперимент: вначале получим заголовок активного окна, 'затем найдем окно по заголовку, работая в Unicode кодировке. HandleW = GetActiveWindow()

'Получить заголовок окна ArCapt = VBA.String$(128, vbNullChar)

Res = GetWindowText(HandleW, ArCapt(0), 128) If Res > 0 Then 'OK Debug.Print ArCapt Else: MsgBox ("не получен заголовок окна") End If




Начало  Назад  Вперед



Книжный магазин