Вопрос по лекции 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)