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


Чеботарев Игорь

Благодаря тому, что при написании скриптов 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 - reg_s15
32 - reg_s15
48 - reg_s15
64 - reg_s15

Четвертый параметр метода 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, и может обращаться к функциям и переменным из других сценариев. Подробно эта тема будет рассмотрена в одной из будущих статей.

читать еще по теме