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


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


  • FindWindow, которая позволяет найти окно по его заголовку, вернув описатель окна в качестве результата,
  • GetWindowText, SetWindowText, позволяющие получить и установить новый заголовок окна.

Заметим сразу же, что нам удалось успешно вызвать и корректно работать с двумя последними функциями в Unicode кодировке. Однако этот прием не работает при вызове функции FindWindowW. Несмотря на все попытки, переданная для поиска строка заголовка не приводила к успешному завершению поиска. Но обо всем по порядку. Приведем вначале раздел объявлений модуля с именем Unicode, созданного для работы с этим примером:

Option Explicit 'Объявление вызываемых функций в Unicode кодировке 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 ArCapt() As Byte 'Объявление динамического массива

Все пояснения уже сделаны и поэтому приведем процедуру этого модуля, вызывающую функции API:

Пример 6.5.

(html, txt)

Приведем результаты отладочной печати:

327894 Document1 - Microsoft Word

Document1 - Microsoft Word NewDoc

Дадим краткие комментарии к тексту процедуры:

  • Работа процедуры начинается с вызова функции API FindWindowA, работающей в кодировке ANSI. Она успешно находит окно, заголовок которого задан переменной Capt. Функция возвращает его описатель.
  • На следующем шаге мы пытались решить эту же задачу, используя функцию API FindWindowW, работающую в кодировке Unicode. В тексте нашел отражение один из вариантов решения.


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