Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys. Вопрос в том что во время автоматизации может потребоваться не нажатие клавиатуры, а нажатие кнопок в сообщениях этих программ. Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре) |
Сценарии WSH для доступа к файловой системе. Объектная модель FileSystemObject
Получение списка всех файлов заданного каталога
В свойстве Files объекта Folder, соответствующего определенному каталогу, хранится коллекция находящихся в этом каталоге файлов (объектов File ). В листинге 6.7 приведен сценарии ListFiles.vbs, выводящий на экран названия всех файлов, которые содержатся в специальной папке Мои документы.
'******************************************************************* ' Имя: ListFiles.vbs ' Язык: VBScript ' Описание: Получение списка всех файлов заданного каталога '******************************************************************* 'Объявляем переменные Dim FSO,F,File,Files,WshShell,PathList,s 'Создаем объект FileSystemObject Set FSO = WScript.CreateObject("Scripting.FileSystemObject") 'Создаем объект WshShell Set WshShell = WScript.CreateObject("WScript.Shell") 'Создаем объект WshSpecialFolders Set WshFldrs = WshShell.SpecialFolders 'Определяем путь к папке Мои документы PathList = WshFldrs.item("MyDocuments") & "\" 'Создаем объект Folder для папки Мои документы Set F = FSO.GetFolder(PathList) 'Создаем коллекцию файлов каталога Мои документы Set Files = F.Files s = "Файлы из каталога " & PathList & VbCrLf 'Цикл по всем файлам For Each File In Files 'Добавляем строку с именем файла s = s & File.Name & VbCrLf Next 'Выводим полученные строки на экран WScript.Echo s '************* Конец *********************************************Листинг 6.7. Построение списка файлов в каталоге (JScript)
Создание каталога
Создать новый каталог на диске можно либо с помощью метода CreateFolder объекта FileSystemObject, либо с помощью метода Add коллекции Folders. Оба эти метода используются в сценарии MakeFolder.vbs для создания в каталоге C:\Program Files подкаталогов Новая папка и Еще одна новая папка (листинг 6.8).
'******************************************************************* ' Имя: MakeFolder.vbs ' Язык: VBScript ' Описание: Создание нового каталога '******************************************************************* 'Объявляем переменные Dim FSO, F, SubFolders 'Создаем объект FileSystemObject Set FSO = WScript.CreateObject("Scripting.FileSystemObject") 'Создаем каталог C:\Program Files\Новая папка FSO.CreateFolder("C:\Program Files\Новая папка") 'Создаем объект Folder для каталога C:\Program Files Set F = FSO.GetFolder("C:\Program Files") 'Создаем коллекцию подкаталогов каталога C:\Program Files Set SubFolders = F.SubFolders 'Создаем каталог C:\Program Files\Еще одна новая папка SubFolders.Add "Еще одна новая папка" '************* Конец *********************************************Листинг 6.8. Создание нового каталога (VBScript)
Создание текстового файла
Для создания текстового файла используется метод CreateTextFile объекта FileSystemObject, который имеет один обязательный текстовый параметр (путь к создаваемому файлу) и два необязательных логических параметра ( Overwrite и Unicode ).
Параметр Overwrite имеет значение в том случае, когда создаваемый файл уже существует. Если Overwrite равно True, то такой файл перепишется (старое содержимое будет утеряно), если же в качестве Overwrite указано False, то файл переписываться не будет. Если этот параметр вообще не указан, то существующий файл также не будет переписан.
Параметр Unicode указывает, в каком формате (ASCII или Unicode) следует создавать файл. Если Unicode равно True, то файл создается в формате Unicode, если же Unicode равно False или этот параметр вообще не указан, то файл создается в режиме ASCII.
В сценарии CreateTempFile.vbs (листинг 6.9) показано, каким образом можно создать файл со случайно выбранным именем (такие файлы часто используются для записи временных данных).
'******************************************************************* ' Имя: CreateTempFile.vbs ' Язык: VBScript ' Описание: Создание временного файла со случайным именем '******************************************************************* Dim FSO,FileName,F,s 'Объявляем переменные 'Создаем объект FileSystemObject Set FSO = WScript.CreateObject("Scripting.FileSystemObject") 'Генерируем случайное имя файла FileName = FSO.GetTempName 'Создаем файл с именем FileName Set F = FSO.CreateTextFile(FileName, true) 'Закрываем файл F.Close 'Сообщаем о создании файла WScript.Echo "Был создан файл " & FileName '************* Конец *********************************************Листинг 6.9. Создание временного файла со случайным именем (VBScript)
Операции чтения и записи строк для текстового файла
Последовательный (строка за строкой) доступ к текстовому файлу обеспечивает объект TextStream. Методы этого объекта позволяют читать информацию из файла и записывать ее в него. Создается объект TextStream при открытии или создании текстового файла с помощью следующих методов:
- CreateTextFile объектов FileSystemObject и Folder;
- OpenTextFile объекта FileSystemObject;
- OpenAsTextStream объекта File.
Перечисленные ранее методы позволяют открывать файл в разных режимах ввода/вывода (за это отвечает параметр Iomode ) с использованием разных форматов (в соответствии со значением параметра Format ) (см. табл. 6.2, 6.3)
Константа | Значение | Описание |
---|---|---|
ForReading | 1 | Файл открывается только для чтения, записывать информацию в него нельзя |
ForWriting | 2 | Файл открывается для записи. Если файл с таким именем уже существовал, то при новой записи его содержимое теряется |
ForAppending | 8 | Файл открывается для добавления. Если файл уже существовал, то информация будет дописываться в конец этого файла |
Константа | Значение | Описание |
---|---|---|
TristateUseDefault | -2 | Файл открывается в формате, используемом системой по умолчанию |
TristateTrue | -1 | Файл открывается в формате Unicode |
TristateFalse | 0 | Файл открывается в формате ASCII |
В листинге 6.10 приведен сценарий TextFile.vbs, в котором создается файл test1.txt и в него записываются строка текста. После этого файл открывается для чтения, строка считывается из него и выводится на экран.
'******************************************************************* ' Имя: TextFile.vbs ' Язык: VBScript ' Описание: Запись строк в текстовый файл и чтение из него '******************************************************************* Dim FSO,F,TextStream,s 'Объявляем переменные ' Инициализируем константы Const ForReading = 1, ForWriting = 2, TristateUseDefault = -2 ' Создаем объект FileSystemObject Set FSO=WScript.CreateObject("Scripting.FileSystemObject") ' Создаем в текущем каталоге файл test1.txt FSO.CreateTextFile "test1.txt" ' Создаем объект File для файла test1.txt set F=FSO.GetFile("test1.txt") ' Создаем объект TextStream (файл открывается для записи) Set TextStream=F.OpenAsTextStream(ForWriting, TristateUseDefault) ' Записываем в файл строку TextStream.WriteLine "Это первая строка" ' Закрываем файл TextStream.Close ' Открываем файл для чтения Set TextStream=F.OpenAsTextStream(ForReading, TristateUseDefault) ' Считываем строку из файла s=TextStream.ReadLine ' Закрываем файл TextStream.Close ' Отображаем строку на экране WScript.Echo "Первая строка из файла test1.txt:" & vbCrLf & vbCrLf & s '************* Конец *********************************************Листинг 6.10. Запись информации в текстовый файл и чтение из него (VBScript)
Копирование и перемещение файлов и каталогов
Для копирования файлов/каталогов можно применять метод CopyFile/CopyFolder объекта FileSystemObject или метод Copy соответствующего этому файлу/каталогу объекта File/Folder. Перемещаются файлы/каталоги с помощью методов MoveFile/MoveFolder объекта FileSystemObject или метода Move соответствующего этому файлу/каталогу объекта File/Folder.
Отметим, что при использовании всех этих методов процесс копирования или перемещения прерывается после первой возникшей ошибки. Кроме того, нельзя перемещать файлы и каталоги с одного диска на другой.
В листингах 6.11 и 6.12 приведен сценарий CopyFile.vbs, иллюстрирующий использование метода Copy. В этом сценарии на диске C создается файл TestFile.txt, который затем копируется на рабочий стол.
'******************************************************************* ' Имя: CopyFile.vbs ' Язык: VBScript ' Описание: Создание и копирование файла '******************************************************************* 'Объявляем переменные Dim FSO,F,WshShell,WshFldrs,PathCopy 'Создаем объект FileSystemObject Set FSO = WScript.CreateObject("Scripting.FileSystemObject") 'Создаем файл Set F = FSO.CreateTextFile("C:\TestFile.txt", true) 'Записываем в файл строку F.WriteLine "Тестовый файл" 'Закрываем файл F.Close 'Создаем объект WshShell Set WshShell = WScript.CreateObject("WScript.Shell") 'Создаем объект WshSpecialFolders Set WshFldrs = WshShell.SpecialFolders 'Определяем путь к рабочему столу PathCopy = WshFldrs.item("Desktop")+"\" 'Создаем объект File для файла C:\TestFile.txt Set F = FSO.GetFile("C:\TestFile.txt") 'Копируем файл на рабочий стол F.Copy PathCopy '************* Конец *********************************************Листинг 6.11. Создание текстового файла и копирование его в другой каталог (VBScript)
Удаление файлов и каталогов
Для удаления файлов/каталогов можно применять метод DeleteFile/DeleteFolder объекта FileSystemObject или метод Delete соответствующего этому файлу/каталогу объекта File/Folder. Отметим, что при удалении каталога неважно, является ли он пустым или нет — удаление будет произведено в любом случае. Если же заданный для удаления файл/каталог не будет найден, то возникнет ошибка.
В листинге 6.12 приведен сценарий DeleteFile.vbs, в котором производится удаление предварительно созданного файла C:\TestFile.txt.
'******************************************************************* ' Имя: DeleteFile.vbs ' Язык: VBScript ' Описание: Создание и удаление файла '******************************************************************* 'Объявляем переменные Dim FSO,F,FileName 'Создаем объект FileSystemObject Set FSO = WScript.CreateObject("Scripting.FileSystemObject") 'Задаем имя файла FileName="C:\TestFile.txt" 'Создаем файл Set F = FSO.CreateTextFile(FileName, true) 'Записываем в файл строку F.WriteLine "Тестовый файл" 'Закрываем файл F.Close WScript.Echo "Файл создан" FSO.DeleteFile FileName WScript.Echo "Файл удален" '************* Конец *********************************************Листинг 6.12. Создание и удаление файла (VBScript)