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


Функция EnumWindows - часть 4


Пример 6.7.

Напомним, эта процедура вызывается автоматически в процессе работы процедуры EnumWindows. Поскольку процедура всегда возвращает значение 1, означающее успешность ее работы, то число ее вызовов определяется размером перечисляемого множества окон. Обратите внимание и на то, что в процедуре используется только первый параметр - описатель текущего окна, который передается вызываемым Win32 API функциям GetWindowText и GetClassName. Второй параметр вообще не используется, вместо этого напрямую происходит заполнение коллекций, заданных глобальными переменными. Так обеспечивается связь с внешним миром.

Чтобы закончить пример, нам осталось привести описание процедуры GetCaptions, вызывающей EnumWindows:

Public Sub GetCaptions() 'Вызов Win32 API функции EnumWindows, 'вызывающей в свою очередь Callback функцию EnumWindowsProc Dim item As Variant Dim Res As Long

Res = EnumWindows(AddressOf EnumWindowsProc, 0&)

'Обработка глобальных переменных, определенных в 'результате совместной работы EnumWindows и EnumWindowsProc Debug.Print "Число окон = ", HandleCol.Count Debug.Print "Описатели окон" Res = 0 For Each item In HandleCol Debug.Print item Res = Res + 1 If Res > 10 Then Exit For Next item

Debug.Print "Число окон с заголовками= ", CaptCol.Count Debug.Print "Заголовки окон" Res = 0 For Each item In CaptCol Debug.Print item Res = Res + 1 If Res > 10 Then Exit For Next item

Debug.Print "Число окон, возвращающих класс = ", ClassNameCol.Count Debug.Print "Имена классов окон" Res = 0 For Each item In ClassNameCol Debug.Print item Res = Res + 1 If Res > 10 Then Exit For Next item End Sub

Пример 6.8.

Несколько комментариев к этой процедуре:

  1. Главное, на что следует обратить внимание, это на операцию "AddressOf" в момент вызова Win32 API функции EnumWindows. В результате ее выполнения создается ссылка на Callback функцию (адрес расположения функции в памяти). Заметьте, на имя передаваемой функции не накладывается ограничений, поэтому в разных вызовах могут быть разные имена, что и позволяет иметь при необходимости несколько Сallback функций.
  2. Мы передаем 0 в качестве значения второго параметра.


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