Настройка операционной системы и пакетов прикладных программ для работы с документами. Разработка приложения на базе интегрированных сред, страница 8

При объявлении DLL в стандартном модуле, процедура DLL (Public по умолчанию) может вызываться кодом отовсюду в приложении Visual Basic. Для ограничения области определения процедуры DLL формой, в объявлении необходимо поместить ключевое слово Private.

Задание:

Создать приложение, которое выводит на экран список открытых окон в системе.  Для создания такого приложения следует использовать функцию API (интерфейса программирования приложений Windows) EnumWindows и оператор AddressOf.

Разработка приложения

1. Состав проекта с Вашим именем добавьте стандартный модуль. В этот модуль введите следующий программный код (Примечание: в методическом пособии полужирным шрифтом набран программный код, курсивом – поясняющие назначение используемых операторов и функций комментарии, набирать которые нет необходимости):

Public Declare Function EnumWindows Lib “user32” _

(ByVal lpEnumFunc As Any, ByVal lParam As Any) As Long

Функция API EnumWindows служит для перечисления всех открытых окон

Аргументы: lpEnumFunc - указатель на функцию обратного вызова,

lParam – любой внешний параметр, используемый для передачи информации в программу VB

Declare Function GetWindowText Lib “user32” Alias _

“GetWindowTextA” (ByVal hWnd As Long, ByVal lpString _

As String, ByVal cch As Long) As Long

Функция GetWindowText возвращает имя окна по его указателю (аргумент – hWnd).

lpString – должен содержать указатель на текстовый буфер для имени, cch – длину этого    буфера, которая используется в функции обратного вызова.

Function EnumCallBackProc(ByVal hWnd As Long, ByVal _

ColListWin  As Collection) As Long

EnumCallBackProc – функция обратного  вызова. Значение аргумента hWnd (указатель окна) и второго аргумента передаются ей фунцией EnumWindows.

В данном примере вторым параметром является объект  Collection.

On Error Resume Next    ‘ошибки API – функций VB необрабатывает

   Dim sWindowTitle As String

   Dim lTextEnd As Long

   Dim lRet As Long

Следующий оператор резервирует буфер достаточной длины для приема имени окна

   sWindowTitle = String(512, 0)

Следующее выражение формирует название очередного окна окна

lRet = GetWindowText(hWnd, sWindowTitle, 512)

If lRet > 1 Then

Этот оператор находим конец имени окна

lTextEnd = InStr(sWindowTitle, Chr$(0))

Полученное имя добавляется в коллекцию имен окон

colWinList.Add Left(sWindowTitle, lTextEnd - 1)

   End If

   EnumCallBackProc = 1

End Function

2. Создайте новую форму UserForm1. С помощью окна Свойства задайте название (Caption) этой форме Список окон.

3. В форме создайте кнопку CommandButton1 и задайте ей название Окна.

4. Создайте процедуру обработки события Click для кнопки CommandButton1. В эту процедуру введите следующий программный код, который  будет выводить список окон на экран:

Private Sub CommandButton1_Click()

Dim lRet As Long

Dim Mes As String

Dim cc

Следующий оператор запускает функцию перечисления

Dim colListWindows As New Collection

    lRet = EnumWindows(AddressOf EnumCallBackProc, _

colListWindows)

Для просмотра результата все имена собираются в строку

For Each cc In colListWindows

       Mes = Mes & Trim(cc) & vbCrLf

Next

и выводятся на  экран.

MsgBox Mes

End Sub

5. При помощи команды меню «Запуск» проверьте работу созданной Вами программы. При необходимости осуществите поиск и устранение ошибок в режиме отладки программы и сохраните созданную форму.

6. Включите созданное приложение в Ваш документ Word, чтобы форма выводилась в окне документа при его открытии (процедура Openс программным кодом UserForm1.Show).

7. Сохраните введенные в документе изменения, закройте окно редактора Visual Basic и завершите работу текстового процессора Word.

8. Откройте сохраненный на рабочем столе файл с Вашим именем, не отключая макросы, и продемонстрируйте преподавателю вашу работу.

II.    Самостоятельная работа.

Рекомендуемое время

30 минут

Задание:

Создать приложение, которое выводит путь к папке Windows в окне сообщения и текущую дату. Для создания приложения объявить функцию GetWindowsDirectory (функция для нахождения папки, содержащей файлы MicrosoftWindows):