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

Примеры создания диалогового окна Примеры скриптов и макросов для 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
' ***********************************************************
Option Explicit
' Флаги
Const BIF_returnonlyfsdirs      = &H0001
Const BIF_editbox               = &H0010
Dim wsh, objDlg, objF
' Получить объект Application оболочки Windows.
Set objDlg = WScript.CreateObject("Shell.Application")
Set objF = objDlg.BrowseForFolder (&H0, _
"Выберите каталог для копирования", BIF_editbox + BIF_returnonlyfsdirs)
' Проверка условия
If isValue(objF) Then
MsgBox "Выбрано: " & objF.Title
Else
MsgBox "Отменено"
End If
 
Function IsValue(obj)
' Проверить, вернул ли метод какое-либо значение.
Dim tmp
    On Error Resume Next
tmp = "" & obj
If Err <> 0 Then
IsValue = False
Else
IsValue = True
End If
On Error GoTo 0
End Function

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

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

' ***********************************************************
' BrowseForFolder_files.vbs
' Создание диалогового окна для выбор файла на VBScript
' ************************************************************
Option Explicit
' Флаги.
Const BIF_returnonlyfsdirs       = &H0001
Const BIF_dontgobelowdomain           = &H0002
Const BIF_statustext                 = &H0004
Const BIF_returnfsancestors      = &H0008
Const BIF_editbox                     = &H0010
Const BIF_validate                    = &H0020
Const BIF_browseforcomputer  = &H1000
Const BIF_browseforprinter      = &H2000
Const BIF_browseincludefiles   = &H4000
Dim file
file = BrowseForFoldr("Выберите файл или папку", BIF_returnonlyfsdirs + BIF_browseincludefiles, "")
If file = "-5" Then
WScript.Echo "Выбран файл в корневой папке"
Else
If file = "-1" Then
WScript.Echo "Объект не выбран"
Else
WScript.Echo "Объект: ", file
End If
End If
 
' Получение полного пути к объекту
Function BrowseForFoldr(title, flag, dir)
On Error Resume Next
Dim oShell, oItem, tmp
Set oShell = WScript.CreateObject("Shell.Application")
' Взывать диалоговое окно Browse For Folder.
Set oItem = oShell.BrowseForFolder(&H0, title, flag, dir)
If Err.Number <> 0 Then
If Err.Number = 5 Then
BrowseForFoldr="-5"
Err.Clear
Set oShell = Nothing
Set oItem = Nothing
Exit Function
End If
End If
' Теперь попытаемся получить полный путь.
BrowseForFoldr = oItem.ParentFolder.ParseName(oItem.title).Path
' Обработка нажатия кнопки Cancel и выбора диска.
 
If Err<> 0 Then
If Err.Number = 424 Then                 ' Обработать кнопку Cancel.
BrowseForFoldr ="-1"
Else
Err.Clear
' Обработать ситуацию, в которой пользователь выбирает диск.
tmp = InStr(1, oItem.title, ":")
If tmp > 0 Then          ' Символ ":" найден; взять два символа и добавить \.
BrowseForFoldr = Mid(oItem.Title, (tmp - 1), 2) & "\"
End If
End If
End If
Set oShell = Nothing
Set oItem = Nothing
On Error GoTo 0
End Function

InputBox

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

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

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

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

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

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

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

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

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

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

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
'**********************************************************************
Option Explicit
Dim Result
result = MsgBox("Определяем, на что было нажато", vbOkCancel+ vbInformation, "Заголовок")
If result = vbOK Then
WScript.Echo "Нажата клавиша ОК"
Else
WScript.Echo "Нажата клавиша Отмена"
End If

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
' *************************************************************
Option Explicit
Dim Message, Title, result, WShell
Message = "Нажмите на кнопку"
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 & ")"
End if
WScript.Echo "Выход из программы"
Оцените статью
Технологии программирования и ведение блога
Добавить комментарий