..Организация диалога с пользователем

Благодаря тому, что при написании скриптов WSH, используется либо VBScript, либо JScript (довольно мощные языки программирования), появляется возможность создавать сценарии, позволяющие получить от пользователя какую-либо информацию, влияющую на процесс работы сценария. Эта важная возможность помогает создавать более гибкие и функциональные сценарии, предусматривающие различные нужны пользователей.

Получить информацию от пользователя можно с помощью диалогового окна или строки ввода информации. Рассмотрим, для начала диалоговые окна. Ниже приведен простой скрипт, выводящий пример диалогового окна и выдающий сообщение о выборе пользователя:

// Диалоговое окно. JScript
// http://www.whatis.ru

var WSHShell = WScript.CreateObject("WScript.Shell");
// Подготовка переменных для диалогового окна
var vbOKCancel = 1;
var vbInformation = 64;
var vbCancel = 2;
var Message = "Пример создания диалогового окна";
var Title   = "Нажмите ОК или Cancel";

// Вызов диалогового окна
var intDoIt;

intDoIt =  WSHShell.Popup(Message,
                          0,
                          Title,
                          vbOKCancel + vbInformation );

// Результат выбора пользователя
WScript.Echo(intDoIt);

Вызов диалогового окна осуществляется с помощью метода Popup объекта WSHShell. Первым параметром передается текст, выводимый в диалоговом окне, третьим — заголовок окна, четвертым — набор кнопок и иконка в диалоговом окне. Вот на последнем и остановимся подробнее.

Каждому набору кнопок соответствует цифровая переменная:

0 — ОК;
1 — ОК и Отмена;
2 — Прервать, Повтор, Пропустить;
3 — Да, Нет, Отмена;
4 — Да, Нет;
5 — Повтор, Отмена;
6 — Отмена, Повторить, Продолжить.

Для лучшей читаемости кода удобнее определить переменную с названием, отражающим набор кнопок, в начале сценария, как это сделано в примере, а непосредственно при вызове диалогового окна использовать не цифру, а эту переменную.

Аналогично наборам кнопок, иконки в диалоговом окне определяются с помощью цифровой переменной. Соответствие переменных иконкам:

16 —
32 —
48 —
64 —

Четвертый параметр метода Popup представляет собой сумму переменных набора кнопок и иконки, выводимых в диалоговом окне. Так, если вам надо вывести иконку вопроса и кнопки Да, Нет, Отмена, нужно передать в параметр 32 + 3, т.е. 35.

Создавать диалоговое окно мы научились, теперь неплохо бы узнать какой выбор сделал пользователь. В примере результат выбора в диалоговом окне сохраняется в переменной intDoIt, а потом выводится на экран. Всем кнопкам диалогового окна соответствует числовое значение, которое и возвращается при выборе одной из них. Полный список приведен ниже:

1 — ОК;
2 — Отмена;
3 — Прервать;
4 — Повтор;
5 — Пропустить;
6 — Да;
7 — Нет;
10 — Повторить;
11 — Продолжить.

Таким образом, получив результат выбора пользователя, можно предусмотреть несколько вариантов работы скрипта.

Однако, только кнопками Да, Нет, Отмена и т.п. не всегда можно обойтись. Например, как узнать у пользователя каталог, куда он хочет сохранить какой-то файл? Или букву диска, куда подмапировать сетевой ресурс? В таких случаях поможет строка ввода информации (InputBox). Ниже приведен простой сценарий, демонстрирующий работу такого диалогового окна.

' Диалоговое окно. VBScript
' http://www.whatis.ru

Dim s,s1
s1="Введите ваше имя"
' Выводим диалоговое окно со строкой ввода на экран
s=InputBox(s1,"Пример получения данных от пользователя")
' Результат ввода
MsgBox "Вас зовут " & s

Дальше уже можно обрабатывать введенную информацию в своем сценарии. Вот только есть один небольшой подводный камень: InputBox присутствует только в VBScript. А как быть, если вам надо написать сценарий на языке JScript? В WSH есть возможность объединять несколько сценариев, написанных на одном или разных языках, в один файл. Для этого служат wsf-файлы. Тема эта заслуживает отдельной статьи, но если кратко, то это XML файл, имеющий определенную структуру, в которой, каждый сценарий помещается в отдельный элемент XML, и может обращаться к функциям и переменным из других сценариев. Подробно эта тема будет рассмотрена в одной из будущих статей.

   Отправить статью как PDF