Примеры создания диалогового окна

Примеры создания диалогового окна Примеры скриптов и макросов для Word и WSH

В данной статье я решил рассмотреть способы создания диалогового окна базовыми способами – средствами Windows Script Host. В частности рассмотрены методы: BrowseForFolder, InputBox, Echo, MsgBox и Popup.

И так, приступим

BrowseForFolder

Создание диалогового окна для выбора папок и даже файлов осуществляется с помощью метода BrowseForFolder, что бы его использовать, надо прежде создать экземпляр объекта Application. Стоит взять на заметку, что поддержку осуществляет функция из библиотеки Shdocvw.dll, которая входит в состав Internet Explorer версий 4 и 5.

Также понадобится библиотека Shell32.dll версии 4.71 и выше, доступная в Windows 98 (версия 4.72) и Windows 2000 (версия 5). В Windows 95/NT 4 библиотека Shell32.dll версии 4.71 доступна, если установлен Internet Explorer 4 с обновлением Active Desktop. При ус­тановке Internet Explorer 5 в Windows 95/NT обновления Shell32.dll не происходит. Следует сначала установить Internet Explorer 4 с обновле­нием Active Desktop, а затем уже Internet Explorer 5.

Давайте создадим экземпляр объекта Shell.Application и посмотрим на синтаксис:

Set objDig = WScript.CreateObject("Shell.Application")Set objF = objDig.BrowseForFolder(hWnd, Titl, Options[, Root])

Рассмотрим описание параметров:

hWnd  — передает создаваемому диалоговому окну описатель окна, он всегда должен быть равен 0, поскольку у сценария нет описателя.
Titl — задает строку, которая выводится в созданном диалоговом окне ниже заголовка.
Options — представляет собой 32-разрядный флаг, который зада­ет внутренние свойства диалогового окна. Некоторые константы можно комбинировать (например, &Н0010 и &Н0001).
Root – необязательный, позволяет заранее выбрать пап­ку. Путь может быть задан в виде строки (на­пример, D:Data) или с помощью одного из значений, которые позволяют использовать специальную папку в простран­стве имен оболочки. Список значений также описано в шпаргалке.

Давайте рассмотрим пример на VBScript для выбора каталогов:

' ***********************************************************' BrowseForFolder_folders.vbs' Создание диалогового окна выбора каталога на VBScript' ***********************************************************OptionExplicit' ФлагиConst BIF_returnonlyfsdirs      = &H0001Const BIF_editbox               = &H0010Dim wsh, objDlg, objF' Получить объект Application оболочки Windows.Set objDlg = WScript.CreateObject("Shell.Application")Set objF = objDlg.BrowseForFolder (&H0, _"Выберите каталог для копирования", BIF_editbox + BIF_returnonlyfsdirs)' Проверка условияIf isValue(objF) ThenMsgBox "Выбрано: " & objF.TitleElseMsgBox "Отменено"EndIf Function IsValue(obj)' Проверить, вернул ли метод какое-либо значение.Dim tmp    OnErrorResumeNexttmp = "" & objIf Err <> 0 ThenIsValue = FalseElseIsValue = TrueEndIfOnErrorGoTo 0EndFunction

В данном примере, с помощью BrowseForFolder происходит создание диалогового Windows окна для выбора папки, и возвращает сообщение, какой каталог был выделен или же ничего не было выбрано. Сам метод позволяет выбирать не только каталог, но и файлы.

Теперь рассмотрим пример на VBScript для выбора файлов:

' ***********************************************************' BrowseForFolder_files.vbs' Создание диалогового окна для выбор файла на VBScript' ************************************************************OptionExplicit' Флаги.Const BIF_returnonlyfsdirs       = &H0001Const BIF_dontgobelowdomain           = &H0002Const BIF_statustext                 = &H0004Const BIF_returnfsancestors      = &H0008Const BIF_editbox                     = &H0010Const BIF_validate                    = &H0020Const BIF_browseforcomputer  = &H1000Const BIF_browseforprinter      = &H2000Const BIF_browseincludefiles   = &H4000Dim filefile = BrowseForFoldr("Выберите файл или папку", BIF_returnonlyfsdirs + BIF_browseincludefiles, "")If file = "-5"ThenWScript.Echo "Выбран файл в корневой папке"ElseIf file = "-1"ThenWScript.Echo "Объект не выбран"ElseWScript.Echo "Объект: ", fileEndIfEndIf ' Получение полного пути к объектуFunction BrowseForFoldr(title, flag, dir)OnErrorResumeNextDim oShell, oItem, tmpSet oShell = WScript.CreateObject("Shell.Application")' Взывать диалоговое окно Browse For Folder.Set oItem = oShell.BrowseForFolder(&H0, title, flag, dir)If Err.Number <> 0 ThenIf Err.Number = 5 ThenBrowseForFoldr="-5"Err.ClearSet oShell = NothingSet oItem = NothingExitFunctionEndIfEndIf' Теперь попытаемся получить полный путь.BrowseForFoldr = oItem.ParentFolder.ParseName(oItem.title).Path' Обработка нажатия кнопки Cancel и выбора диска. If Err<> 0 ThenIf Err.Number = 424 Then                 ' Обработать кнопку Cancel.BrowseForFoldr ="-1"ElseErr.Clear' Обработать ситуацию, в которой пользователь выбирает диск.tmp = InStr(1, oItem.title, ":")If tmp > 0 Then          ' Символ ":" найден; взять два символа и добавить .BrowseForFoldr = Mid(oItem.Title, (tmp - 1), 2) & ""EndIfEndIfEndIfSet oShell = NothingSet oItem = NothingOnErrorGoTo 0EndFunction

InputBox

Теперь давайте рассмотрим функцию InputBox, которая позволяет получить информации от пользователя. Стоит упомянуть, что функция InputBox поддерживается только языком VBScript. Давайте посмотрим на ее общий синтаксис:

result = InputBox(текст[, [заголовок], [умолчание], [поз-Х], [поз-У]])

Пример создания диалогового окна - - метод Popup

Описание ключей таковы.

Текст — Необходимый параметр, определяющий сообщение, которое вы­водится в диалоговом окне.
Заголовок — Необязательный, определяющий текст заголовка диалогового окна.
Умолчание — Необязательный, задающий значение по умолча­нию для текстового поля.
Поз-Х иПоз-У — Необязательные, определяющие положение верхнего левого угла диалогового окна.

Есть еще два необязательных ключа helpflle и context, с их помощью можно создавать встроенную справку, хотя, как правило, в данном контексте в этом нет  необходимости.

Если необязательный ключ не задан, VBScript использует значение по умолчанию. Чтобы опустить необязательный параметр, надо оставить его место между двумя запятыми пустым:

InputBox("Привет", "Тест", , 100, 200)

В отличие от MsgBox ключа для кнопки у функции InputBox нет. Резуль­тат, возвращаемый InputBox при закрытии, зависит от того, какая кнопка была нажата: ОК возвращает содержимое текстового поля (т. е. данные, введенные пользователем), a Cancel отменяет результаты ввода и возвращает пустую строку. Переменная result позволяет проверить, ввел ли человек действительную информацию.

' ***********************************************************' InputBox.vbs' Создание диалогового окна для получение вводимой информации на VBScript'****************************************************************OptionExplicitDim Message, resultDim Title, Text1, Text2' Определить переменные диалоговых окон.Message = "Диалоговое окно на VBScript"Title = "Создание пользовательского диалогового окна "Text1 = "Было нажато на отмену"Text2 = "Вы ввели:" & vbCrLf'    Все готово для использования функции InputBox;result = InputBox(Message, Title, "Ввод данных", 100, 100)' Обработать введенную информацию.If result = ""Then           ' ОтменаWScript.Echo Text1ElseWScript.Echo Text2 & resultEndIf

Echo

Метод Echo можно применять как в VBScript, так и в языке Jscript. Существенных отличий в синтаксисе нет. Ниже приводится простой пример диалогового окна, которое будет выводить сообщение для пользователя:

WScript.Echo " VBScript, vbYesNo ровно: ", vbYesNo
WScript.Echo("Jscript, Math.E ровно: ",Math.E);
Скрипт для создания диалогового окна

Как видим, все предельно просто, в кавычках мы прописали текст, а далее после запятой следовала константа, значение которой должно быть показано пользователю. Для перевода строки также надо использовать константы или ESC-последовательность:

WScript.Echo "Первая строка" & vbCrLf &"Вторая строка"
WScript.Echo("Первая строка<strong>n","Вторая строка<strong>n");</strong></strong>

Тут, для JS мы взяли ESC-последовательность «n» , а для VBS – vbCrLf константу.

MsgBox

MsgBox позволяет создавать диалоговое окно только сценариями языка VBS, в отличии от метода Echo она имеет в своем составе больший функционал – число кнопок, название окна, ну и, естественно, сам текст. Общий синтаксис таков:

MsgBox(prompt[,buttons][,title][,helpfile,context])

prompt – является обязательным и отвечает за текст, выводимый диалоговым окном
buttons – необязательный, целое число или константа (количество и тип кнопок, вид значка, установка фокуса)
title – также не является обязательным, определяет название окна
helpfile – задает путь к файлу-справке, файл-справка должен иметь расширение .hlp
context – число, которое задает раздел справки

Вот простой пример:

MsgBox "Пример с двумя кнопками", 1, "Пример работы"

Фактически, ключи для кнопок и заголовок можно опустить, тогда мы получим результат, идентичный Echo. С помощью констант можно задавать тип, фокус и количество кнопок. В добавок, вы можете определить и значок для создаваемого диалогового окна, то есть, вы вправе комбинировать константы, смотрим:

MsgBox "Как сделать вывод диалогового окна с двумя кнопками и значком", vbOkCancel+vbInformation, "Cкрипт"

Теперь давайте посмотрим, как работают два последних ключа helpfile и context, ведь с их помощью можно задать справку. Тут нам понадобится константа vbMsgBoxHelpButton, смотрим на код:

MsgBox "Как сделать пример диалогового окна со справкой", vbMsgBoxHelpButton, "Cкрипт", "filemon.hlp ", 1

Не знаю почему, но ничего не получилось, выбивает ошибку:

Раздел не существует. Обратитесь к поставщику продукта за обновленной версией файла справки. (129)

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

' ***********************************************************' MsgBox.vbs' Создание диалогового окна с помощью MsgBox'**********************************************************************OptionExplicitDim Resultresult = MsgBox("Определяем, на что было нажато", vbOkCancel+ vbInformation, "Заголовок")If result = vbOK ThenWScript.Echo "Нажата клавиша ОК"ElseWScript.Echo "Нажата клавиша Отмена"EndIf

Popup

Теперь давайте россмотрим пример, как осуществить создание диалогового окна используя метод Popup, который сам по себе не является частью языка сценариев. Он входит в состав объектной модели WSH и поддерживается объектом WshShell. По своим характеристикам, он является аналогом функции MsgBox. Прежде всего, в сценарии нужно создать экземпляр объекта WshShеll. Для этого можно применить функцию CreateObject. Давайте посмотрим, на начальные строки для будущих примеров.

И так, создаем экземпляр компонента:

var WshShell = WScript.CreateObject("WScript.Shell");//JScript
Set WshShell = WScript.CreateObject("WScript.Shell") ' VBScript

Теперь мы сможем использовать переменную WshShеll для вызова функции Popup. Теперь давайте рассмотрим общий синтаксис:

WshShell.Popup (текст, таймаут, заголовок, кнопки);

Тут передаются следующие параметры:

Текст – собственно, тот текст, что надо вывести в диалоге. Тут можно использовать конкатенацию (объединение) констант, подстрок и переменных.
Таймаут – время, через которое будет закрыто пользовательское окошко, если от пользователя не поступят команды на закрытие. Для отключения тайм аута надо присвоить значение 0.
Заголовок – собственно, заголовок создаваемого окна.
Кнопки – тут используются константы, которые задают вид и количество кнопок.

Скачать архив с примерами

Сам метод возвращает код кнопки, которой пользователь закрыл окно. Теперь давайте рассмотрим по одному примеру как создавать диалоговое окно для VBScript и Jscript синтаксиса.

 // ***********************************************************// Pорup.js// Создание диалогового окна с помощью метода Pорup// *********************************************************// Объявляем переменные для управления диалогомvar vbOKCancel =1;var vbOK =1;var vbInformation =64;var vbCancel =2;var resultat;var Message ="Нажмите на клавишу";var Title ="Работа с функцией Pоpup";var WshShell = WScript.CreateObject("WScript.Shell");// Выводим диалоговое окноresultat = WshShell.Popup(Message,0,Title, vbOKCancel + vbInformation);// Условие для проверки, на что нажал пользовательif(resultat == vbOK){             WScript.Echo("Нажато на OK "+"(Код: "+ resultat +")");}else{         WScript.Echo("Нажато на Отмена "+"(Код: "+ resultat +")");}WScript.Echo("Выход из программы");

Ну и пример на VBScript:

 ' ***********************************************************' Pорup.vbs' Создание диалогового окна с помощью метода Pорup' *************************************************************OptionExplicitDim Message, Title, result, WShellMessage = "Нажмите на кнопку"Title = "Работа с методом Poрuр"' Создаем экземпляр объекта WshShell .Set WShell = WScript.CreateObject("WScript.Shell")' Выводим диалоговое окно с помощью функции Poрuр,result =  WShell.Popup(Message,  0, Title, vbOKCancel + vbInformation)' Условие для проверки, на что нажал пользовательif (result = vbOK) then                     WScript.Echo "Кликнуто на OK " & "(Код: " & result & ")"else            WScript.Echo "Кликнуто на Отмена " & "(Код: " & result & ")"EndifWScript.Echo "Выход из программы"
Оцените статью
Технологии программирования и ведение блога
Добавить комментарий