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

       

Еще один пример работы с функцией EnumWindows


Наш следующий пример является упрощенным вариантом предыдущего примера. Его целью является демонстрация возможности передать информацию в Callback процедуру EnumWindowsProc через параметр lParam. В нашем примере вместо трех коллекций будет использоваться только одна - коллекция описателей, именно она и будет передана стандартным способом через параметр lParam. Коллекция будет передана в качестве аргумента при вызове процедуры EnumWindows, а та, в свою очередь передаст его функции обратного вызова EnumWindowsProc. Приведем текст модуля, содержащего процедуры нашего примера:

Пример 6.10.

(html, txt)

Дадим несколько комментариев:

  1. В этом примере параллельно показаны оба способа передачи информации. Имена функций, оканчивающиеся на 1, связаны с передачей информации через параметр lParam.
  2. В операторе Declare, описывающем функцию EnumWindows1, тип параметра lParam задан как Any, и в данном случае параметр передается по ссылке, а не по значению.
  3. При описании Callback функции EnumWindowsProc1 для этого параметра указан уже конкретный тип Collection.
  4. Аргумент HandleCol1 типа Collection передается при вызове EnumWindows в процедуре GetHandles1. Функция обратного вызова EnumWindowsProc1 заполнит эту коллекцию элементами.

Приведем результаты ее работы:

Number of windows -184 Their handles: 131826 131824 131854 131868 36504034 2359854 65636 262764 65690 65626 3539122



Содержание раздела