Windows Script Host для Windows 2000/XP - Андрей Попов
Шрифт:
Интервал:
Закладка:
Метод Popup объекта WshShell
С помощью метода Popup (подробное описание метода приведено в главе 1) можно создавать такие же диалоговые окна, как и при помощи функции MsgBox, причем этот метод можно использовать как в VBScript-, так и в JScript-сценариях (листинги 2.12 и 2.13).
Листинг 2.12. Создание диалогового окна с помощью метода Popup (JScript)/*******************************************************************/
/* РРјСЏ: Popup.jsВ В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В */
/* Язык: JScript                                                  */
/* Описание: Пример использования метода WshShell.Popup           */
/*******************************************************************/
var WshShell,Res,Text,Title; //Объявляем переменные
//Рнициализируем константы для диалоговых РѕРєРѕРЅ
var vbOkCancel=1,vbOk=1;В В
//Создаем объект WshShell
WshShell = WScript.CreateObject("WScript.Shell");
Text="Пример вывода строк в диалоговоеnокно WScript";
Title="Заголовок"
//Выводим диалоговое окно на экран
Res=WshShell.Popup(Text,0,Title,vbOkCancel);
// Определяем, какая из кнопок была нажата в диалоговом окне
if (Res==vbOk) WshShell.Popup("Нажата кнопка OK");
else WshShell.Popup("Нажата кнопка Отмена");
/************* Конец *********************************************/
Листинг 2.13. Создание диалогового окна с помощью метода Popup (VBScript)'*******************************************************************
' РРјСЏ: Popup.vbs
' Язык: VBcript
' Описание: Пример использования метода WshShell.Popup
'*******************************************************************
Option Explicit
Dim WshShell,Res,Text,Title ' Объявляем переменные
' Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
Text="Пример вывода строк в диалоговое" & vbCrLf & "окно WScript"
Title="Заголовок"
' Выводим диалоговое окно на экран
Res=WshShell.Popup(Text,0,Title,vbOkCancel)
' Определяем, какая из кнопок была нажата в диалоговом окне
If (Res=vbOk) Then
 WshShell.Popup "Нажата кнопка OK"
Else
 WshShell.Popup "Нажата кнопка Отмена"
End If
'************* Конец *********************************************
Главным отличием метода Popup от функции MsgBox является наличие параметра nSecToWait, задающего время (в секундах), по истечении которого диалоговое окно будет автоматически закрыто. Если этот параметр равен нулю, как в приведенных выше примерах, то окно будет закрыто только после нажатия какой-либо кнопки в нем.
Ввод строк текста
Для организации в сценариях диалога с пользователем необходимо уметь принимать вводимые с клавиатуры строки текста. В консольном и графическом режимах ввод информации осуществляется по-разному: при запуске сценария с помощью cscript.exe мы имеем доступ к стандартному входному потоку StdOut, при использовании wscript.exe можно применять функцию InputBox языка VBScript.
Ввод строк в консольном режиме
Самый простой способ ввести строку в консольном режиме предоставляет метод WScript.StdIn.ReadLine, при использовании этого метода ввод завершается нажатием клавиши <Enter>.
Отметим, что при использовании стандартного входного потока WScript.StdIn в Windows ХР(по крайней мере в той версии, которой пользовался автор) возникает проблема, связанная с кодировкой символов кириллицы. Дело в том, что метод WScript.StdIn.ReadLine возвращает строку в DOS-кодировке, а для вывода на экран с помощью методов WScript.StdOut.WriteLine или WScript.Echo строка должна быть в Windows-кодировке (в предыдущих версиях Windows метод WScript.StdOut.WriteLine требовал строку в DOS-кодировке). Поэтому для корректного отображения символов кириллицы на экране приходится применять дополнительные функции конвертации из DOS- в Windows-кодировку. Стандартных методов или функций, предназначенных для этой цели, в языках JScript и VBScript нет, поэтому такие функции следует написать самостоятельно.
Рассмотрим сначала написанную на JScript функцию конвертации DosToWin из листинга 2.14:
function DosToWin(s) {
 var i,ss; //Объявляем переменные
 //Проверяем, создан ли объект RusDict
В if (typeof(RusDict)=="undefined")
 //Если объект RusDict не создан, создаем его
В MakeRusDict();
В ss="";
 for (i=0;i<s.length;i++) { //Цикл по всем символам в строке
 if (RusDict.Exists(s.charAt(i))) //Проверяем наличие символа в словаре
  //Преобразуем i-й символ в Windows-кодировку
В В ss+=RusDict.Item(s.charAt(i));
В else ss+=s.charAt(i);
В }
В return ss;
}
Как РјС‹ РІРёРґРёРј, эта функция преобразует переданную РІ качестве параметра строку следующим образом: РІСЃРµ символы кириллицы РІ этой строке переводятся РІ Windows-РєРѕРґРёСЂРѕРІРєСѓ, остальные символы остаются без изменений. Основным РІ функций DosToWin является использование объекта Dictionary (аналог ассоциативного массива) СЃ именем RusDict. Ртот объект формируется РІ функции MakeRusDict Рё содержит пары "ключ"–"значение" для всех Р±СѓРєРІ СЂСѓСЃСЃРєРѕРіРѕ алфавита, причем РІ качестве ключа указывается Р±СѓРєРІР° РІ DOS-РєРѕРґРёСЂРѕРІРєРµ, Р° РІ качестве значения — СЃРёРјРІРѕР» СЃ РєРѕРґРѕРј, который соответствует этой Р±СѓРєРІРµ РІ Windows-РєРѕРґРёСЂРѕРІРєРµ:
function MakeRusDict() {
 //Создаем объект Dictionary
В RusDict = WScript.CreateObject("Scripting.Dictionary");
 //Заполняем пары "ключ" (символ в DOS-кодировке)-"значение" (символ в