Продолжаем изучение 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, удачи!