RTFM! статьи, советы, скрипты
::Заработок с помощью сайта ::JScript по-русски! ::Все русские мануалы::
МЕНЮ
О САЙТЕ
НОВОСТИ
СТАТЬИ
КНИГИ
АППЛЕТЫ
СВЯЗЬ

СЧЕТЧИКИ
Rambler's Top100
Рейтинг@Mail.ru
Яндекс цитирования

Оконный скриптинг

Автор: cmapuk Сайт: http://www.comprice.ru     Рейтинг: N/A из 7       <<НАЗАД
   
   Мало кто из более-менее продвинутих пользователей Windows-систем знает о существовании Windows Script Host, о simple-юзерах и говорить не приходится. Кроме того, мало кто знает, какие возможности имеют JScript/VBScript для Windows.
   
   Однажды на просторах ужасного по навигации сайта msdn.microsoft.com я наткнулся на линк для скачивания полной документации по Windows Scripting. Ввиду того, что делать мне было нечего, да и просто из интереса, я скачал сетап этой хелпы, в надежде найти там что-нибудь новенькое для себя, и занялся ее прочтением. Каково же было мое удивление, когда я попал в раздел, посвященный возможностям JScript, не входящим в стандарт ECMA! А вы знали, что JScript/VBScript работают с регулярными выражениями и имеют подобие операторов поиска/замены а-ля Perl? Но... обо всем по порядку.
   
   Кто ты, Windows Script Host?
   Windows Script Host (WSH) стал более-менее известен у нас только после бага MSIE и MS Outlook, позволявшего с помощью ActiveX создать WSH-объект. Но толком так никто и не понял, "зачем оно надо". Для чего же все-таки нужен WSH? WSH позволяет работать с файловой системой, реестром, сетевыми соединениями (диски, принтеры, етц), окружением и др. С помощью wsh-скриптов можно управлять запуском программ (даже с доступом к их Stdin/Stdout/Stderr), посылать сигналы другим процессам, удаленно администрировать систему, работать с сетевым(и не только) принтером, управлять входом в систему (login-скрипты) и многое другое. Кроме того, WSH можно совместить с js-, vbs-скриптами, чтобы взять от них "все самое лучшее". Скрипты для Windows Script Host могут быть не только отдельными программами, но и встраиваться в HTML-страницы, дабы быть использованными в технологии Active Server Pages (ASP), так же как JScript, VBScript или PerlScript (www.activestate.com).
   
   JScript - это не JavaScript
   В мире скриптовых языков существует стандарт ECMA, в рамках которого каждый из ***Script должен (теоретически =) ) соответствовать общепринятым нормам. Но эти нормы не ограничивают разработчиков в наполнении своего скриптового языка всевозможными инструментами, не входящими в стандарт. Все это выглядит для промежуточного потребителя (скрипт-программист) как два набора возможностей: те, которые он может предложить любому конечному потребителю (пользователю), и те, которые он может использовать для своих целей.
   
   Как пример можно привести JScript. Часть возможностей этого языка можно использовать в создании веб-страниц, причем понять этот язык сможет как MS Internet Explorer, так и Netscape Navigator или Opera. Использование другой части языка - нестандартной - приведет к необходимости оставлять на веб-страницах надписи типа "Только для MSIE", о которых пользователи Сети уже давно забыли и которые в наше время являются просто недопустимыми (хотя такие "клоуны" еще остались). В современном веб-строительстве вполне достаточно стандартных возможностей скриптовых языков - и для совместимости с броузерами и для воплощения всевозможных дизайнерских идей. Во многом этому поспособствовала так долго не получавшая всеобщего признания технология Shockwave Flash.
   
   Вернемся все же к JScript. Нынешнее состояние этого языка располагает к обширной эксплуатации последнего в Windows-системах. Этот язык будет полезен для администраторов локальных сетей, для пользователей, стремящихся автоматизировать свой рабочий процесс, а главное - для программистов, предпочитающих технологию ASP (Active Server Pages).
   
   Для любителей Visual Basic, занимающихся программированием для MSOffice и т.п., подойдет VBScript, который является бра-том-почти-близнецом JScript и может выполнять те же задачи, но VB-программистам в данном случае не придется изучать новый язык.
   
   Кроме стандартных возможностей, вроде мамематических вычислений, простых манипуляций со строками и т.п., JScript предлагает поработать с регулярными выражениями (Regexp), с ActiveX-объектами (OLE), cо строками в "адвансед"-режиме и другое. Рассмотрим примеры.
   
   <script language="JScript">
    var r, re; //Определим переменные
    var str = "Hello, VBscript! VBscript forever!"; //Определяем текст
    re = /VBscript/g; //В re переменной сохраним регулярное выражение
    r = str.replace(re, "JScript"); //Заменяем
    alert(r);
   </script>
   
   В данном случае, re - регулярное выражение, str содержит "подопытную" строку. Методом replace() мы заменяем в строке str шаблон re на новую строку - "JScript".
   
   С помощью ActiveXObject можно манипулировать различными объектами, например, работать с таблицами Excel.
   
   <script language="JScript">
    var xl = new ActiveXObject("Excel.Application"); // Можно запустить Excel
    var xl = new ActiveXObject("Excel.Sheet"); // Табличный объект
    xl.Application.Visible = true; // Управляем видимостью
    xl.ActiveSheet.Cells(1,1)="Hello from JScript!"; // Записываем в ячейку A1 текст.
    xl.SaveAs("E:\\Work\\Articles\\WS\\
   Testsheet.xls"); // Сохраняемся
    xl.Application.Quit; // и выходим из Excel
   </script>
   
   Кроме того, можно создавать объекты прямо из файлов с помощью функции GetObject.
   
   Еще одна довольно интересная возможность JScript не может не привлечь ваше внимание - объекты Dictionary. Правильнее будет сказать, что это не объект JScript, а возможность среды, а точнее - Scripting Runtime Library. Dictionary является аналогом ассоциативных массивов Perl - хэшей. Для тех, кто не знаком с этим понятием, поясню. Элементы обычного массива определяются числовым индексом, в то время как в хэшах этим индексом может быть любая строка. Допустим, к списку данных Имя, Фамилия, E-mail с помощью массива вам придется обращаться так: array[0],array[1],array[2]. С помощью ассоциативных массивов вы можете хранить эти данные как проименованный список. В JS, в отличие от Perl, вы манипулируете объектом ассоциативного массива:
   
   <script language="JScript">
    hash = new ActiveXObject("Scripting.Dictionary");
    hash.Add("name", "cmapuk");
    hash.Add("lastname", "[0nline]");
    hash.Add("e-mail", "cmapuk@comprice.ru");
    alert("Имя:"+hash.Item("name"));
    alert("Фамилия:"+hash.Item("last-name"));
    alert("E-mail:"+hash.Item("e-mail"));
   </script>
   
   Кроме Dictionary, SRL предоставляет объект FileSystemObject, позволяющий работать с файлами и директориями в виде объектов. Это несколько удобнее, чем напрямую через WSH.
   
   Чем еще хорош Window Script Host?
   Для начала рассмотрим, какие объекты предоставляет нам WSH и для чего они могут пригодиться.
   
   WScript Object - Основной объект WSH
   
   WshArguments Object - Доступ к коллекции аргументов командной строки
   
   WshController Object - Для работы со скриптами удаленного управления
   
   WshEnvironment Object - Доступ к коллекции переменных окружения
   
   WshNamed Object - Доступ к именованным аргументам командной строки
   
   WshNetwork Object - Работа с сетью
   
   WshRemote Object - Удаленные скрипты
   
   WshRemoteError Object - Информация об ошибках (для WshRemote)
   
   WshScriptExec Object - Работа со скриптами
   
   WshShell Object - Работа с консолью
   
   WshShortcut Object - Создание ярлыков
   
   WshSpecialFolders Object - Пути к специальным папкам Windows
   
   WshUnnamed Object - Доступ к безымённым аргументам командной строки
   
   WshUrlShortcut Object - Создание интернет-ссылок
   
   Теперь разберемся, что из себя представляют WSH-скрипты. Скрипты для Windows Script Host могут содержаться в BAT-файлах, подключаются с помощью ActiveXObject в JS- и VBS-скриптах (в т.ч. в HTML). Кроме этого, WSH-скрипты могут содержаться в "своих" файлах - *.wsh и *.wsf (wsh-файлы - это скрипты для старых версий WSH). Эти файлы представляют собой специальные XML-конструкции. В одном файле можно использовать все доступные скриптовые языки.
   
   <job id="Exampel1">
    <script language="VBScript" src="include.vbs"/>
    <script language="JSScript">
    alert('Hello!');
    </script>
    WScript.Echo("Это пример wsf-файла с включениями JS и VBS");
   </job>
   
   В одном wsf-файле может содержаться много таких конструкций. Тогда в этом файле все конструкции job заключаются в тэги <package></package>. Для того чтобы запустить ту или иную конструкцию, следует вызывать скрипт в командной строке следующим образом:
   
   >cscript //Job:Exampel1 mytest.wsf
   
   
   В этом случае выполнится конструкция <job ID="Exampel1">....</job> из файла mytest.wsf.
   
   Стоит пояснить, что для запуска WSH-скриптов используются две стандартные windows-программы: wscript.exe и cscript.exe. Первая используется для запуска скриптов "двойным кликом" без параметров, вторая - для запуска с параметрами, в данном случае, из командной строки.
   
   Интересная возможность WSH - поддержка Drag'n'Drop. С помощью объекта WScript.Arguments в своем скрипте вы получаете имена файлов, с которыми вам надо работать. Вы сохраняете свой скрипт на диск, и далее можете просто "перетащить" нужные файлы и "бросить" их на ваш скрипт, который примет их имена(пути к ним) и сделает с ними то, что вам нужно.
   
   Теперь перейдем к рассмотрению задач, которые можно выполнять с помощью WSH, на примере JScript+ActiveXObject.
   
   // Сетевые манипуляции
   var net;
   net = new ActiveXObject("WScript.Network");
   net.MapNetworkDrive("X:", "\\\\works\\publish","true","user-name","password");
   // Подключили сетевой диск
   ...
   var net;
   net = new ActiveXObject("WScript.Network");
   net.AddWindowsPrinterConnec-tion("\\\\Printers\\hp5000");
   // Подключили принтер
   ...
   var net;
   net = new ActiveXObject("WScript.Network");
   net.SetDefaultPrinter("\\\\Prin-ters\\hp5000");
   // Установили принтер по умолчанию
   ...
   // С помощью объекта FileSystemObject посмотрим, какие у нас есть диски
   fso = new ActiveXObject("Scripting.FileSystem-Object");
   e = new Enumerator(fso.Drives); //Перебор дисков объектом Enumerator.
   // Этот объект является чем-то вроде конструкции For..Each
   s = "";
   for (;!e.atEnd();e.moveNext()){ // Перебираем диски
   x = e.item();
   s = s + x.DriveLetter;
   s += " - ";
   if (x.DriveType == 3) // Если диск сетевой
    n = x.ShareName; //Берем имя
   else if (x.IsReady) //Если диск доступен (локальный)
    n = x.VolumeName; //Имя диска.
   else
    n = "[Диск недоступен!]";
    s += n + "\n";
   }
   alert(s);
   
   Теперь можно привести простой пример login-скрипта.
   
   oNet = new ActiveXObject("WScript.Network");
   sUser = oNet.UserName; // Берем имя пользователя
   // В Win89/Me скрипт может быть запущен раньше,
   // чем пользователь "залогинится". Поэтому в цикле ищем его имя
   // каждые полсекунды, пока не найдем. Если пользователь долго
   // не входит в систему - выйдем (WScript.Quit()).
   startTime = new Date();
   while (sUser == "")
   {
    var curTime = new Date();
    if (curTime - startTime > 30000) WScript.Quit();
    WScript.Sleep(500);
    sUser = oNet.UserName;
   }
   // Теперь все ОК. Пользователь вошел в систему.
   // Подсоединяем его домашнюю директорию
   oNet.MapNetworkDrive("x:", "\\\\server\\users\\" + sUser);
   // Можно здесь добавить запись в лог входа,
   // запустить ту или иную программу или службу, и т.п.
   
   Чтобы получить доступ к какой-либо системной директории, например папке рабочего стола, можно воспользоваться объектом Wscript.SpecialFolders.
   
   // Десктоп текущего пользователя
   curdesc=Wscript.SpecialFolders("Desk-top");
   // Десктоп общий для всех пользователей
   curdesc=Wscript.SpecialFolders("All-UsersDesktop");
   
   WSH-скрипты могут работать со стандартными потоками STDIN, STDOUT, STDERR. Первые два потока могут использоваться только при запуске скрипта с помощью CScript.exe, то есть в командной строке. Стоит сказать, что сообщения об ошибках в WSH-скриптах более информативны, чем обычные сообщения об ошибках Windows или скриптов в броузере.
   
   Манипуляции с реестром WIndows могут производиться с помощью объекта Wscript.Shell. Этот объект позволяет как читать данные, так и записывать их (RegRead, RegWrite, RegDelete).
   
   Теперь еще немного примеров
   <job ID="WShell_notepad">
   <script language="JScript">
    Wsh = WScript.CreateObject('WScript.She-ll');
    Wsh.Run("notepad", 5);
    Wsh.AppActivate("Untitled - Notepad");
    text = "Hello from Windows Script Host!\n";
    for(i=0; i < text.length;i++) {
    ch = mess.substr(i, 1);
    WScript.Sleep(200);
    Wsh.SendKeys(ch);
    }
   </script>
   </job>
   
   Этот скрипт запустит программу Блокнот и напишет в ней фразу из переменной text.
   
   <job Id="WshEnv">
   <script language=JScript>
    var Wsh = WScript.CreateObject("WScript.Shell");
    var WshEnv = Wsh.Environment("SYSTEM");
    WScript.Echo(WshEnv("NUMBER_OF_PROCES-SORS"));
   </script>
   </job>
   Вот так можно обращаться к переменным окружения.
   <job id="js">
   <script language="JScript">
    var WshNet = WScript.CreateObject("WScript.Net-work");
    WScript.Echo("Domain = " + WshNet.UserDomain);
    WScript.Echo("Computer Name = " + WshNet.ComputerName);
    WScript.Echo("User Name = " + WshNet.UserName);
   </script>
   </job>
   
   А вот так можно получить информацию о домене локальной сети, имени компьютера в этой сети и пользователя.
   
   Windows Script Components
   Кроме всех описанных и не описанных выше возможностей самих языков JS, VBS и WSH, имеется возможность создавать свои скриптовые компоненты. После создания компонента вы можете обращаться к его методам и данным, создавая в своей программе объект с помощью WScript.CreateObject("My-Scripting.TestScripts"). Файлы скриптовых компонентов имеют расширение *.wsc и представляют собой файлы XML-образной структуры. Вот пример такого файла:
   
   <?xml version="1.0"?>
   <component>
   <registration
    description="MyScripting"
    progid="MyScripting.TestScripts"
    version="1.00"
    classid="{d0fgb647-fd0c-4c90-a4bd-7473f499d35a}">
    <comment>
    Здесь создастся окно сообщения при регистрации
    </comment>
   </registration>
   <comment> Здесь описания типов и т.п.</comment>
   <public>
    <property name="YourName">
    <get internalName="hiddenGetProperty"/>
    <put internalName="hiddenSetProperty"/>
    </property>
    <method name="SayHello">
    </method>
   </public>
   <comment> А теперь и сам код</comment>
   <script language="JScript">
   <![CDATA[
    function hiddenGetProperty() {
    return YourName_Property;
    }
    function hiddenSetProperty(param) {
    YourName_Property = param;
    }
    function SayHello {
    return "Hello "+YourName_Property+"!";
    }
   ]]>
   </script>
   </component>
   
   В таких компонентах можно разместить часто используемые программные блоки, например коды подключения к БД или разбора определенных файлов.
   
   The End
   Если вы при установке Windows использовали режим Custom, то, вероятно, видели среди компонентов Windows Script Host. В противном случае, можно со 100%-ной уверенностью сказать, что Windows Script Host у вас установлен. Так почему бы не использовать такие богатые возможности?! С помощью Windows Script Host вы сможете упростить и ускорить многие рабочие процессы, настройки компьютера и локальной сети и другие задачи.
   
   


<<НАЗАД      ОЦЕНИТЬ СТАТЬЮ    ВЕРСИЯ ДЛЯ ПЕЧАТИ>>
Статья прочитана :  раз.




пейкюлю



 
 
 
 
 
pauk ©® 2000-2015. All rights reserved.
При перепечатке ссылка на сайт и указание обязательны.
Мнение администрации сайта не всегда совпадает с мнением автора.
Орфография и пунктуация - авторские.
Администрация не несет никакой ответственности за использование материалов.
.
Protected by Copyscape DMCA Takedown Notice Infringement Search Tool