Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys. Вопрос в том что во время автоматизации может потребоваться не нажатие клавиатуры, а нажатие кнопок в сообщениях этих программ. Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре) |
Собственная объектная модель WSH
Объекты-коллекции
В WSH входят объекты, с помощью которых можно получить доступ к коллекциям, содержащим следующие элементы:
- параметры командной строки запущенного сценария или ярлыка Windows (объекты WshArguments, WshNamed и WshUnnamed );
- значения переменных среды (объект WshEnvironment );
- пути к специальным папкам Windows (объект WshSpecialFolders ).
Объект WshArguments
Объект WshArguments содержит коллекцию всех параметров командной строки запущенного сценария или ярлыка Windows. Этот объект можно создать только с помощью свойства Arguments объектов WScript и WshShortcut.
С помощью объекта WshArguments можно также выделять и отдельно обрабатывать аргументы сценария, у которых имеются имена (например, /Name:Andrey ) и безымянные аргументы. Ясно, что использование именных параметров более удобно, так как в этом случае нет необходимости запоминать, в каком порядке должны быть записаны параметры при запуске того или иного сценария.
Для доступа к именным и безымянным аргументам используются соответственно два специальных свойства объекта WshArguments: Named и Unnamed. Свойство Named содержит ссылку на коллекцию WshNamed, свойство Unnamed — на коллекцию WshUnnamed.
Таким образом, обрабатывать параметры командной строки запущенного сценария можно тремя способами:
- просматривать полный набор всех параметров (как именных, так и безымянных) с помощью коллекции WshArguments ;
- выделить только те параметры, у которых есть имена (именные параметры) с помощью коллекции WshNamed ;
- выделить только те параметры, у которых нет имен (безымянные параметры) с помощью коллекции WshUnnamed.
В листинге 5.9 приведен пример сценария, в котором на экран выводятся общее количество параметров командной строки, количество именных и безымянных аргументов, а также значения каждой из этих групп параметров.
'******************************************************************** ' Имя: Args.vbs ' Язык: VBScript ' Описание: Работа с аргументами запущенного сценария '******************************************************************** Option Explicit Dim i,Arg,objArgs,s,objNamedArgs,objUnnamedArgs ' Объявляем переменные Set objArgs = WScript.Arguments ' Создаем объект WshArguments ' Определяем общее количество аргументов s="Всего аргументов: " & objArgs.Count() & vbCrLf For Each Arg In objArgs s=s & Arg & vbCrLf ' Формируем строки со значениями аргументов Next Set objUnnamedArgs=objArgs.Unnamed ' Создаем объект WshUnnamed ' Определяем количество безымянных аргументов s=s & vbCrLf & "Безымянных аргументов: " & objUnnamedArgs.length & vbCrLf For Each Arg In objUnnamedArgs ' Формируем строки со значениями безымянных аргументов s=s & Arg & vbCrLf Next Set objNamedArgs=objArgs.Named ' Создаем объект WshNamed ' Определяем количество именных аргументов s=s & vbCrLf & "Именных аргументов: " & objNamedArgs.Length & vbCrLf ' Проверяем, существует ли аргумент /Имя: If objNamedArgs.Exists("Имя") Then s=s & objNamedArgs("Имя") & vbCrLf End If ' Проверяем, существует ли аргумент /Comp: If objNamedArgs.Exists("Comp") Then s=s & objNamedArgs("Comp") & vbCrLf End If WScript.Echo s ' Выводим сформированные строки '************* Конец *********************************************Листинг 5.9. Доступ к параметрам командной строки запущенного сценария (VBScript)
Объект WshEnvironment
Объект WshEnvironment позволяет получить доступ к коллекции, содержащей переменные среды заданного типа (переменные среды операционной системы, переменные среды пользователя или переменные среды текущего командного окна). Этот объект можно создать с помощью свойства Environment объекта WshShell или одноименного его метода:
Set WshShell=WScript.CreateObject("WScript.Shell") Set WshSysEnv=WshShell.Environment Set WshUserEnv=WshShell.Environment("User")
Объект WshEnvironment имеет свойство Length, в котором хранится число элементов в коллекции (количество переменных среды), и методы Count и Item. Для того чтобы получить значение определенной переменной среды, в качестве аргумента метода Item указывается имя этой переменной в двойных кавычках. В следующем примере мы выводим на экран значение переменной среды PATH (листинг 5.10):
'******************************************************************** ' Имя: Environment.vbs ' Язык: VBScript ' Описание: Работа с переменными среды '******************************************************************** Dim WshShell, WshSysEnv Set WshShell=WScript.CreateObject("WScript.Shell") Set WshSysEnv=WshShell.Environment WScript.Echo "Системный путь:",WshSysEnv.Item("PATH")Листинг 5.10. Работа с переменными среды (VBScript)
Можно также просто указать имя переменной в круглых скобках после имени объекта:
WScript.Echo "Системный путь:",WshSysEnv("PATH")
Кроме этого у объекта WshEnvironment имеется метод Remove(strName), который удаляет заданную переменную среды.
Объект WshSpecialFolders
При установке Windows всегда автоматически создаются несколько специальных папок (например, папка для рабочего стола (Desktop) или папка для меню Пуск (Start)), путь к которым впоследствии может быть тем или иным способом изменен. Объект WshSpecialFolders обеспечивает доступ к коллекции, содержащей пути к специальным папкам Windows; задание путей к таким папкам может понадобиться, например, для создания непосредственно из сценария ярлыков на рабочем столе.
В Windows XP поддерживаются следующие имена специальных папок:
- Desktop;
- Favorites;
- Fonts;
- MyDocuments;
- NetHood;
- PrintHood;
- Programs;
- Recent;
- SendTo;
- StartMenu;
- Startup;
- Templates;
- AllUsersDesktop;
- AllUsersStartMenu;
- AllUsersPrograms;
- AllUsersStartup.
Объект WshSpecialFolders создается с помощью свойства SpecialFolders объекта WshShell:
var WshShell=WScript.CreateObject("WScript.Shell"), WshSpecFold=WshShell.SpecialFolders;
В листинге 5.11 приведен сценарий, формирующий список всех имеющихся в системе специальных папок.
'***************************************************************** ' Имя: SpecFold1.vbs ' Язык: VBScript ' Описание: Вывод названий всех специальных папок Windows '***************************************************************** Option Explicit Dim WshShell, WshFldrs, SpecFldr, s ' Объявляем переменные ' Создаем объект WshShell Set WshShell = WScript.CreateObject("Wscript.Shell") ' Создаем объект WshSpecialFolders Set WshFldrs = WshShell.SpecialFolders s="Список всех специальных папок:" & vbCrLf & vbCrLf ' Перебираем все элементы коллекции WshFldrs For Each SpecFldr In WshFldrs ' Формируем строки с путями к специальным папкам s=s & SpecFldr & vbCrLf Next WScript.Echo s '************* Конец *********************************************/Листинг 5.11. Формирование списка всех специальных папок (VBScript)
Объект WshSpecialFolders также позволяет получить путь к конкретно заданной специальной папке. Например, в сценарии SpecFold2.vbs (листинг 5.12) на экран выводятся пути к папкам рабочего стола (Desktop), избранных ссылок (Favorites) и раздела Программы (Programs) меню Пуск (Run).
'****************************************************************** ' Имя: SpecFold2.vbs ' Язык: VBScript ' Описание: Вывод названий заданных специальных папок Windows '****************************************************************** Option Explicit Dim WshShell, WshFldrs, s ' Объявляем переменные ' Создаем объект WshShell Set WshShell = WScript.CreateObject("Wscript.Shell") ' Создаем объект WshSpecialFolders Set WshFldrs = WshShell.SpecialFolders ' Формируем строки с путями к конкретным специальным папкам s="Некоторые специальные папки:" & vbCrLf & vbCrLf s=s+"Desktop:"+WshFldrs("Desktop") & vbCrLf s=s+"Favorites:"+WshFldrs("Favorites") & vbCrLf s=s+"Programs:"+WshFldrs("Programs") WScript.Echo s ' Выводим сформированные строки на экран '************* Конец *********************************************/Листинг 5.12. Доступ к определенным специальным папкам (VBScript)