Продолжаем изучение WSH скриптов на языке JScript, и сегодня мы поговорим более подробно об этом языке программирования. Рассмотрим наиболее распространенные объекты, методы, а также напишем примеры WSH скриптов, в которых будем использовать эти методы и объекты.
Напомню, что это уже вторая статья по изучению данной технологии и языка Jscript, и для того чтобы Вы лучше понимали, то, о чем мы сегодня будем разговаривать, прочитайте первую статью Основы языка JScript — написание WSH скриптов, если Вы ее еще не читали. Так как в ней рассматриваются основы WSH скриптов и в частности языка Jscript.
Теория у нас была ранее, поэтому перейдем сразу к практике и начнем уже с упомянутого объекта в прошлой статье это – Wscript.
Объект Wscript
Объект Wscript – это один их главных объектов в WSH. С помощью него можно создавать другие объекты, держать связь с ними, выводить информацию в виде всплывающего сообщения, а также он позволяет получить информацию о запущенном скрипте.
У данного объекта есть несколько свойств и методов, поговорим о них.
Свойства объекта:
- Arguments – на основе его создается объект WshArguments, и в котором хранится все передаваемые параметры скрипту, в том числе, например, путь и название файла, который необходимо обработать;
- StdErr, StdIn, StdOut – с помощью этих свойств можно получить доступ к входным и выходным потокам, но только в том случае, если скрипт был запущен в консольном режиме.
Далее давайте рассмотрим основные методы данного объекта.
- Createobject – метод для создания и доступа к другим объектам;
- ConnectObject – метод соединения с объектом;
- DisconnectObject – метод отсоединения от объекта;
- Echo – вывод сообщений на экран;
- Sleep – метод для временной остановки сценария, т.е. скрипт останавливается «Засыпает» на определенный промежуток времени. Ему передается параметр времени, например, 5 секундам соответствует 5000.
Чтобы закрепить все выше перечисленное, давайте напишем простенький скрипт, который просто считает введенные параметры и выведет их на экран, а также мы остановим работу сценария на 5 секунд и еще разок выведем сообщение.
Для запуска скрипта во-первых, скопируйте код ниже в текстовый файл и сохраните с расширением .js. Для того чтобы запустить его с параметрами, откройте командную строку (cmd.exe), перейдите в каталог со скриптом (cd «путь к каталогу») и запустите его, например:
test.js 1 2 3
где 1 2 3 параметры, пишутся с пробелом.
Примечание! В остальных примерах мы не будем передавать параметры, поэтому можно просто запускать скрипт путем двойного клика. Если в будущем у Вас возникнет необходимость в качестве параметра передавать файл, можно запускать как из командной строки (например, test.js C:\folder\name_file), так и путем простого перетаскивания нужного файла на файл скрипта.
Пример 1 — Вывод сообщения
//получаем доступ ко всем параметрам через свойства Arguments
var objArgs = WScript.Arguments;
//объявляем переменные
var i;
var str = 'Введенные параметры: \n';
//циклом считываем все параметры
for (i=0; i<=objArgs.Count()-1; i++){
str = str + objArgs(i)+'\n';
}
//выводим на экран введенные параметры
WScript.Echo(str+"\n"+"Нажмите OK и через 5 секунд появится другое сообщение");
//останавливаем работу скрипта на 5 секунд
WScript.Sleep(5000);
//еще раз выводим сообщение
WScript.Echo("Отработал");
Идем далее, и на очереди объект WshNetwork.
Объект WshNetwork
WshNetwork – объект работы с ресурсами локальной сети. Он поможет в определение имени пользователя, компьютера, домена, в который входит компьютер, а также можно подключать сетевые диски и принтера.
Объект WshNetwork имеет следующие свойства:
- ComputerName — имя компьютера;
- UserDomain — имя домена;
- UserName — имя пользователя.
У данного объекта есть свои методы:
- AddPrinterConnection — используется для подключения локального порта к сетевому принтеру. В качестве параметров передаются:
AddPrinterConnection (имя локального порта, имя сетевого принтера [,сохранить в профиле true/false] [,имя пользователя] [,пароль])
- EnumNetworkDrives – возвращает список сетевых дисков и их пути. В первом элементе буква, во втором путь. Поэтому когда будем считывать эти данные циклом, шагом будет служить 2 элемента;
- EnumPrinterConnections — возвращает список подключенных принтеров;
- MapNetworkDrive – подключает сетевой ресурс. В качестве параметров можно передавать:
MapNetworkDrive (локальное имя диска, что подключаем, [сохранить в профиле true/false], [,имя пользователя] [,пароль])
- RemoveNetworkDrive — отключает подключенный сетевой диск. В качестве параметров:
RemoveNetworkDrive (что отключаем, [игнорируем, если используется true/false], [,удалить из профиля true/false])
- RemovePrinterConnection — отключает подключенный сетевой принтер. Параметры:
RemovePrinterConnection (что отключаем, [игнорируем, если используется true/false], [,удалить из профиля true/false])
- SetDefaultPrinter — делает заданный принтер принтером по умолчанию. Один единственный параметр:
SetDefaultPrinter(какой принтер)
Ну и как обычно пример, давайте выведем имя пользователя, имя компьютера и список всех подключенных сетевых дисках в виде сообщения.
Пример 2 — Выводим имя пользователя, имя компьютера и сетевые диски
//Объявляем переменные
var WshNetwork,str,i;
//Создаем объект WshNetwork
WshNetwork = WScript.CreateObject("WScript.Network");
//начинаем формировать строку
str="Сетевые параметры компьютера :\n\n";
str+="Имя компьютера: "+WshNetwork.ComputerName+"\n";
str+="Имя пользователя: "+WshNetwork.UserName+"\n";
str+="Имя домена: "+WshNetwork.UserDomain+"\n\n";
str+="Список подключенных сетевых дисков\n\n";
//получаем список всех подключенных сетевых дисков
NetDisk = WshNetwork.EnumNetworkDrives();
//перебираем циклом список дисков
for (i=0;i<=NetDisk.Count()-2; i=i+2) {
if (NetDisk(i)==''){
continue;
} else {
str+=NetDisk(i)+" "+NetDisk(i+1)+"\n";
}
}
//выводим на экран сформированную строку
WScript.Echo(str);
Переходим к следующему объекту WshShell.
Объект WshShell
WshShell – служит для многих задач, например, запустить новый процесс, создать ярлык, работать с реестром, посылать нажатие клавиш. Мы его уже затрагивали в прошлой статье, но сейчас рассмотрим подробней.
Свойства объекта:
- CurrentDirectory — хранится полный путь к текущему каталогу (из которого был запущен скрипт);
- Environment — содержит объект WshEnvironment, который обеспечивает доступ к переменным среды операционной системы;
- SpecialFolders — содержит объект WshSpecialFolders для доступа к специальным папкам Windows.
Методы объекта:
- AppActivate(какой процесс) – делает активным указанный процесс или программу с заданным названием, если конечно она запущена;
- CreateShortcut(путь) – создает, изменяет ярлыки windows.
- Popup – создает сообщение windows. Мы его уже затрагивали в прошлой статье. В качестве параметра можно указывать:
Popup(текст, [сколько будет висеть сообщение в сек] , [заголовок сообщения], [тип иконки]) ;
- RegDelete(название параметра или раздела) — для удаления параметра или раздела целиком в реестре;
- RegRead(название параметра или раздела) – читает значения реестра;
- RegWrite – запись значения в реестр. Могут передаваться следующие параметры:
RegWrite(куда пишем, значение [,тип значения]);
- Run(что именно) – запускает новое приложение;
- SendKeys(что посылаем) — посылает нажатие клавиш, то же самое, если бы Вы нажимали сами на клавиатуре.
Пример 3 — Работа с приложением и реестром Windows
Теперь пример. Он довольно простой и особо ничего не делает, но зато даст Вам понять принципы использования этих свойств и методов.
Сначала мы запустим блокнот, сделаем его активным, напишем что-нибудь путем посыла клавиш, затем закроем без сохранения, и напоследок выведем сообщение, в котором укажем, из какой папки был запущен наш скрипт и для освоения работы с реестром считаем одно значение (формат который используется в Вашей операционной системе).
//Создаем объект WshShell
var WshShell = WScript.CreateObject("WScript.Shell");
//считываем свойство CurrentDirectory
var folder = WshShell.CurrentDirectory;
//считываем значение нужного нам параметра реестра
var reg = WshShell.RegRead("HKCU\\Control Panel\\International\\sLanguage");
//запускаем блокнот
WshShell.Run("notepad");
//немного подождем, чтобы потом удачно активизировать окно блокнота
WScript.Sleep(1000);
//делаем активным наш блокнот
WshShell.AppActivate("notepad");
//посылаем нажатие клавиш, в этом случае просто буквы
WshShell.SendKeys("hello");
//посмотрим и насладимся, что все работает!
WScript.Sleep(1000);
//затем посылаем ALT+F4 для того чтобы закрыть блокнот
WshShell.SendKeys("%{F4}");
//посылаем нажатие вправо, для того чтобы не сохранять
WshShell.SendKeys("{right}");
//посылаем enter
WshShell.SendKeys("{enter}");
//выводим сообщение на экран, с заголовком, нужной нам иконкой и нашими данными
WshShell.Popup("Скрипт запущен из "+folder+"\nФормат ОС - "+reg, 0, 'Сообщение', 64);
По-моему довольно все просто и понятно!
В прошлой статье мы работали с excel, теперь давайте попробуем сделать что-нибудь в word.
Пример 4 – Работа с Word
Давайте просто создадим word документ, добавим таблицу и заполним ее некими данными. Вместо вымышленных данных можно использовать данные, например, из текстового файла, как это мы делали в прошлый раз, т.е. считать данные из текстового файла и записать их в таблицу word.
//объявляем переменные
var obj,word,cells;
var numCol = 2;//количество колонок в таблице
var numRow = 1;//количество строк, у нас одна, но мы ее динамически увеличиваем
var i=1; //для цикла
var perehod = 12;//константа для перехода в новую ячейку
var tabLine = 1;//сетка таблицы, 0 нет сетки
var tabSize = 0;//для авторазмера таблицы поставить 1
obj=new ActiveXObject("Word.Application");//создаем объект word
word=obj.Documents.Add();//создаем новый документ word
obj.Visible=true;//запуск графического интерфейса
cells=obj.Selection;//Создаем объект Selection
cells.Font.Size=14; //Задаем размер шрифта
cells.ParagraphFormat.Alignment=1; //Выравнивание по центру
cells.Font.Bold=true;//Устанавливаем полужирный шрифт
cells.TypeText("Пробная таблица \n"); //Пишем заголовок таблицы
cells.Font.Bold=false; //убираем полужирный шрифт
//создаем таблицу в word
obj.ActiveDocument.Tables.add(cells.range, numRow, numCol, tabLine,tabSize);
cells.TypeText ('Порядковый номер');//заголовок первого столбца
cells.ParagraphFormat.Alignment=1;//Выравнивание по центру
cells.MoveRight(perehod);//перевод на новую ячейку
cells.TypeText ('Наименование');//заголовок второго столбца
cells.ParagraphFormat.Alignment=1;//Выравнивание по центру
//циклом записываем данные
do {
cells.MoveRight(perehod);//перевод на новую ячейку
cells.TypeText (i+'');//запись значения
cells.MoveRight(perehod);//перевод на новую ячейку
cells.TypeText ('Строка с номером '+i);//запись значения
i++;//увеличиваем переменную
} while(i<=5)
cells.MoveRight();//перевод на новую строку, выход из таблицы
cells.TypeText ('\n\n'); //сделаем пару enter'ов
cells.TypeText ('Пишем дальше что хотим!');
cells.ParagraphFormat.Alignment=0;//Выравнивание по левому краю
Я думаю на сегодня достаточно, надеюсь, эти примеры помогут Вам освоить WSH на Jscript. В дальнейшем мы продолжим изучение WSH и в частности Jscript, удачи!
