|
Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys. Вопрос в том что во время автоматизации может потребоваться не нажатие клавиатуры, а нажатие кнопок в сообщениях этих программ. Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре) |
Сценарии WSH для доступа к файловой системе. Объектная модель FileSystemObject
Сценарии WSH для доступа к файловой системе. Объектная модель FileSystemObject
Сценарии WSH позволяют получить полный доступ к файловой системе компьютера, в отличие от JScript- или VBScript-сценариев, внедренных в HTML-страницы, где в зависимости от уровня безопасности, который устанавливается в настройках браузера, те или иные операции могут быть запрещены.
Объекты для основных операций с файловой системой
Для работы с файловой системой из сценариев WSH предназначены восемь объектов, главным из которых является FileSystemObject. С помощью методов объекта FileSystemObject можно выполнять следующие основные действия:
- копировать или перемещать файлы и каталоги;
- удалять файлы и каталоги;
- создавать каталоги;
- создавать или открывать текстовые файлы;
- создавать объекты Drive, Folder и File для доступа к конкретному диску, каталогу или файлу соответственно.
С помощью свойств объектов Drive, Folder и File можно получить детальную информацию о тех элементах файловой системы, с которыми они ассоциированы. Объекты Folder и File также предоставляют методы для манипулирования файлами и каталогами (создание, удаление, копирование, перемещение); эти методы в основном копируют соответствующие методы объекта FileSystemObject.
Кроме этого имеются три объекта-коллекции: Drives, Folders и Files. Коллекция Drives содержит объекты Drive для всех имеющихся в системе дисков, Folders — объекты Folder для всех подкаталогов заданного каталога, Files — объекты File для всех файлов, находящихся внутри определенного каталога.
Наконец, из сценария можно читать информацию из текстовых файлов и записывать в них данные. Методы для этого предоставляет объект TextStream.
В табл. 6.1 кратко описано, какие именно объекты, свойства и методы могут понадобиться для выполнения наиболее часто используемых файловых операций.
Примеры сценариев
Далее приведены простые примеры сценариев, работающих с файловой системой (создание, копирование, удаление файлов и каталогов, чтение и запись строк в текстовом файле и т. д.).
Получение сведений о диске
Доступ к свойствам заданного локального или сетевого диска можно получить с помощью объекта Drive, который возвращается методом GetDrive объекта FileSystemObject, а также может быть получен как элемент коллекции Drives.
В листинге 6.1 приведен сценарий DriveInfo.vbs, который выводит на экран некоторые свойства диска С.
'*******************************************************************
' Имя: DriveInfo.vbs
' Язык: VBScript
' Описание: Вывод на экран свойств диска C
'*******************************************************************
'Объявляем переменные
Dim FSO,D,TotalSize,FreeSpace,s
'Создаем объект FileSystemObject
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
'Создаем объект Drive для диска C
Set D = FSO.GetDrive("C:")
s = "Информация о диске C:" & VbCrLf
'Получаем серийный номер диска
s = s &"Серийный номер: " & D.SerialNumber & VbCrLf
'Получаем метку тома диска
s = s & "Метка тома: " & D.VolumeName & VbCrLf
'Вычисляем общий объем диска в килобайтах
TotalSize = D.TotalSize/1024
s = s & "Объем: " & TotalSize & " Kb" & VbCrLf
'Вычисляем объем свободного пространства диска в килобайтах
FreeSpace = D.FreeSpace/1024
s = s & "Свободно: " & FreeSpace & " Kb" & VbCrLf
'Выводим свойства диска на экран
WScript.Echo s
'************* Конец *********************************************
Листинг
6.1.
Вывод информации о диске (VBScript)
Получение сведений о каталоге
Доступ к свойствам каталога обеспечивает объект Folder. Создать этот объект можно с помощью свойства RootFolder объекта Drive или методов GetFolder, GetParentFolder и GetSpecialFolder объекта FileSystemObject. Также объекты Folder могут быть получены как элементы коллекции Folders.
В сценарии FolderInfo.vbs на экран выводятся свойства каталога, из которого был запущен сценарий (листинги 6.2).
'*******************************************************************
' Имя: FolderInfo.vbs
' Язык: VBScript
' Описание: Вывод на экран даты создания текущего каталога
'*******************************************************************
Dim FSO,WshShell,FoldSize,s 'Объявляем переменные
'Создаем объект FileSystemObject
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
'Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
'Определяем каталог, из которого был запущен сценарий
'(текущий каталог)
Set Folder = FSO.GetFolder(WshShell.CurrentDirectory)
'Получаем имя текущего каталога
s = "Текущий каталог: " & Folder.Name & VbCrLf
'Получаем дату создания текущего каталога
s = s & "Дата создания: " & Folder.DateCreated & VbCrLf
'Вычисляем размер текущего каталога в килобайтах
FoldSize=Folder.Size/1024
s = s & "Объем: " & FoldSize & " Kb" & VbCrLf
'Выводим информацию на экран
WScript.Echo s
'************* Конец *********************************************
Листинг
6.2.
Вывод информации о каталоге (VBScript)
Получение сведений о файле
Доступ ко всем свойствам файла обеспечивает объект File, создать который можно с помощью коллекции Files или метода GetFile объекта FileSystemObject.
В листинге 6.3 приведен сценарий FileInfo.vbs, в котором на экран выводятся некоторые свойства файла C:\boot.ini.
'*******************************************************************
' Имя: FileInfo.vbs
' Язык: VBScript
' Описание: Вывод на экран некоторых свойств файла
'*******************************************************************
Dim FSO,F,s 'Объявляем переменные
'Создаем объект FileSystemObject
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
'Создаем объект File
Set F = FSO.GetFile("C:\boot.ini")
'Получаем имя файла
s = "Файл: " & F.Name & VbCrLf
'Получаем дату создания файла
s = s & "Дата создания: " & F.DateCreated & VbCrLf
'Получаем тип файла
s = s & "Тип: " & F.Type & VbCrLf
'Выводим информацию на экран
WScript.Echo s
'************* Конец *********************************************
Листинг
6.3.
Вывод информации о файле (VBScript)
Проверка существования диска, каталога или файла
Для проверки существования диска, каталога и файла используются соответственно методы DriveExists, FolderExists и FileExists. В листинге 6.4 приведен сценарий IsExistsFile.vbs, в котором проверяется наличие на диске C файла boot.ini.
'******************************************************************
' Имя: IsExistsFile.vbs
' Язык: VBScript
' Описание: Проверка существования файла
'*******************************************************************
Dim FSO,FileName 'Объявляем переменные
'Создаем объект FileSystemObject
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
FileName = "C:\boot.ini"
if FSO.FileExists(FileName) Then
'Выводим информацию на экран
WScript.Echo "Файл " & FileName & " существует"
else
'Выводим информацию на экран
WScript.Echo "Файл " & FileName & " не существует"
end if
'************* Конец *********************************************
Листинг
6.4.
Проверка существования файла (VBScript)
Получение списка всех имеющихся дисков
Каждому из дисков компьютера (включая подключенные сетевые диски и дисководы со сменными носителями) соответствует элемент коллекции Drives (объект Drive ). Таким образом, для построения списка дисков компьютера нужно в цикле перебрать все элементы коллекции Drives.
В листинге 6.5 приведен сценарий ListDrives.vbs, в котором на экран выводятся сведения обо всех доступных дисках.
'*******************************************************************
' Имя: ListDrives.vbs
' Язык: VBScript
' Описание: Получение списка всех имеющихся дисков
'*******************************************************************
'Объявляем переменные
Dim FSO,s,ss,Drives,D
'Создаем объект FileSystemObject
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
'Создаем коллекцию дисков, имеющихся в системе
Set Drives = FSO.Drives
s = ""
'Перебираем все диски в коллекции
For Each D In Drives
'Получаем букву диска
s = s & D.DriveLetter
s = s & " - "
if (D.DriveType = 3) then 'Проверяем, не является ли диск сетевым
'Получаем имя сетевого ресурса
ss = D.ShareName
else
'Диск является локальным
if (D.IsReady) then 'Проверяем готовность диска
'Если диск готов, то получаем метку тома для диска
ss = D.VolumeName
else
ss = "Устройство не готово"
end if
s = s & ss & VbCrLf
end if
Next
'Выводим полученные строки на экран
WScript.Echo s
'************* Конец *********************************************
Листинг
6.5.
Построение списка всех имеющихся дисков (VBScript)
Получение списка всех подкаталогов заданного каталога
Для построения списка всех подкаталогов определенного каталога можно воспользоваться коллекцией Folders, которая хранится в свойстве SubFolders соответствующего объекта Folder и содержит объекты Folder для всех подкаталогов.
В листинге 6.6 приведен сценарий ListSubFold.vbs, в котором на экран выводятся названия всех подкаталогов каталога C:\Program Files.
'*******************************************************************
' Имя: ListSubFold.vbs
' Язык: VBScript
' Описание: Получение списка всех подкаталогов заданного каталога
'*******************************************************************
'Объявляем переменные
Dim FSO,F,SFold,SubFolders,Folder,s
'Создаем объект FileSystemObject
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
'Путь к каталогу
SFold = "C:\Program Files"
s = "Каталог " & SFold & VbCrLf
s = s & "Подкаталоги:" & VbCrLf
'Создаем объект Folder для каталога C:\Program Files
Set F=FSO.GetFolder(SFold)
'Создаем коллекцию подкаталогов каталога C:\Program Files
Set SubFolders = F.SubFolders
'Цикл по всем подкаталогам
For Each Folder In SubFolders
'Добавляем строку с именем подкаталога
s = s & Folder & VbCrLf
Next
'Выводим полученные строки на экран
WScript.Echo s
'************* Конец *********************************************/
Листинг
6.6.
Построение списка подкаталогов (VBScript)