При объявлении 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 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
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):
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.