Visual basic html = vbscript виды процедур


Содержание

Visual basic html = vbscript виды процедур

Copyright© 1998 Моховой Алексей. wanderfly@chat.ru

Все примеры скриптов действуют только в MSIE 3.0 и выше!

Предисловие.

Я не ошибусь, если назову Бейсик (BASIC — Begginners Allpurpose Symbolic Instruction Code, т.е символический командный универсальный код для начинающего :) самым простым языком программирования. Даже при небольшом опыте, программы можно писать практически не задумываясь. Свою историю этот язык программирования высокого уровня начал в далеком 1963 году. Именно тогда небольшой группой студентов последнего курса Дортмутского колледжа под чутким руководством профессора Дж. Кемени и была разработана самая первая версия этого языка. В то время, помимо Бейсика, широко были распространены также Fortran, Cobol, Algol, PL/1, Focal и Pascal. Из них, до настоящего времени дожили, пожалуй лишь Паскаль и Бейсик, сильно изменившись при этом.

Как это не прискорбно для ярых противников Microsoft, но именно эта компания способствовала широкому распространению Бейсика (вспомним Quick Basic). По моему опыту писать на нем было удобнее, чем на Turbo Bacic компании Borland, которая более известна по языку C++. Повсеместная «Виндуализация» PC компьютеров, вынудила к разработке версии Бейсика для Windows приложений. Таким клоном в 1991 году стал Visual Basic, позволяющий визуально создавать прикладные программы, довольно приличного уровня. Но все же, по моему мнению, из за простоты Visual Basic сдает свои позиции тем же Си и Java. С появлением всемирной сети Internet, и языка HTML стало возможным создание активных приложений на веб страницах. Единственным языком для этих целей был Java Script. Да, именно был. Когда свет увидел Microsoft Internet Explorer 3.0, в нем, помимо поддержки Java script появилась и поддержка Visual Basic Scripting Edition, или просто VBscript. Как известно, JavaScript был разработан Netscape и поначалу стал известен как LiveScript. После шумихи вокруг Java, Netscape переименовала его в JavaScript, когда получила лицензию от Sun. Microsoft самостоятельно разработала JScript для своего броузера, за что правда тоже не избежала разбирательств с Sun.

Кроме Java, MSIE3.0 (и выше), может еще и исполнять программы на VBScript. Netscape Navigator не поддерживает пока (надеюсь, что пока) VBScript, поэтому этот язык не очень широко применяется, а многим даже не известен. А жаль, человеку умеющему писать на обычном QB достаточно месяца, а то и меньше, чтобы перейти на VBscript и создавать красивые активные веб страницы, ни чем не уступающие страницам с JavaScript и даже во многим превосходящие их. Поэтому, если с надеждой смотреть в будущее, то изучить VBScript можно уже сейчас. В этой статье я попытаюсь рассказать основы VBScript, не вдаваясь в тонкости. Моя цель, только заинтересовать рядового пользователя и начинающих WebДизайнеров. Вот и все из истории:) Начнем.

Cравнение VBScript и JavaScript.

Прежде чем начинать познавать VBScript, давайте сравним две одинаковые, простые программы на JS и VBS. Это будет полезным для тех, кто знает JavaScript (к коим я не отношусь:(.
Суть программы: вводим текст в верхнее поле, нажимаем кнопку «Скопировать» и текст копируется в нижнее поле.

Да, как видно, различий практически нет. JS поддерживает только функции, VBS и функции и процедуры (подпрограммы). Так же следует отметить, что VBS отличие от JS не чувствителен к регистру символов, т.е. для него что copyfun(), что CoPYfuN() — один пес:). Так что можете сделать выводы, тем, кто знает ява скрипт, будет легко освоить VBS, а тем кто не знает пока ни того не другого будет еще легче, поскольку переучиваться не придется. Учиться лучше на примерах, поэтому постараюсь их здесь приводить побольше. Я надеюсь, что Вы хотя бы умеете писать программы на обыкновенном Бейсике (QB или TB)? Тогда эта статья именно для Вас.

От QuickBasic до VBscript — один шаг.

Начнем изучение не стандартным подходом. Обычно сначала все пишут программу, выводящую на экран строку «ПРИВЕТ ПИПЛЫ :)» Мы же попробуем перевести обычную «Бейсиковскую» программу — на VBscript, чтобы показать — как между ними много общего. Поставим задачу, написать программу, которая бы случайным образом загадывала число от 1 до 100, и предлагала Вам его угадать. При неправильном предположении, программа должна выводить сообщение о том, больше загаданное число или меньше. Ведется подсчет попыток. В случае победы выводится поздравление.

Программа на обычном Бейсике:

Как видите, такая программа пошла бы даже на БК0010:) Я даже оставил ненавистные операторы GOTO (интересно, об них еще помнят?). Для тех кто не понимает, опишу алгоритм:

10 очистка экрана и включение генератора случайных чисел.
20 переменной «a» присваивается целое случайное значение
от 1 до 100, счетчику числа попыток присваивается
значение=1.
30, 40 выводится сообщение.
50 ввод Вашего варианта «v».
60 если загаданное число больше Вашего варианта, то
выводится сообщение, на единицу увеличивается счетчик
попыток и программа отправляется на строку 40.
70 если загаданное число меньше Вашего варианта, то
выводится сообщение, на единицу увеличивается счетчик
попыток и программа отправляется на строку 40.
80 Если числа совпадут то выводится поздравление, кстати,
по идее, проверку этого условия можно и опустить.
90 THE END

2. Язык программирования VBScript и программная логика скриптов

2.1 Основы синтаксиса

Синтаксис VBScript, документация по VBScript, отличия VBScript от Visual Basic

VBScript является подмножеством языка Microsoft Visual Basic for Applications (сокращенно – VBA ), поставляемого с Microsoft Office и Visual Basic . Документация — не в MSDN , а нужно скачивать отдельно с Web -сайта Microsoft в виде файла vbsdoc.exe (была установлена на предыдущей лабораторной). Основные синтаксические принципы VBScript как языка программирования:

o VBScript нечувствителен к регистру;

o чтобы закомментировать код до конца строки, используется одинарная кавычка (‘) или команда REM ;

o символьные значения должны заключаться в двойные кавычки;

o максимальная длина любого имени в VBScript (переменные, константы, процедуры) — 255 символов;

o начало нового оператора — перевод на новую строку (точка с запятой, как в C , Java , JavaScript для этого не используется);

o ограничений на максимальную длину строки нет. Несколько операторов в одной строке разделяются двоеточиями:

WScript . Echo «Проверка 1» : WScript . Echo «Проверка 2»

o для удобства чтения можно объединить несколько физических строк в одну логическую при помощи пробела:

WScript . Echo «Сообщение пользователю» _

o можно объявлять и использовать переменные только одного типа данных — Variant (об этом позже).

Для тех, кто работал с обычным Visual Basic , основные отличия VBScript от Visual Basic :

o VBScript — интерпретируемый язык (программы запускаются и работают медленнее, но вносить в них изменения намного удобнее);

o VBScript не требует, чтобы код скрипта был помещен внутрь блока Sub () или Function ();

o нет команды Debug . Print (вместо нее рекомендуется использовать WScript . Echo );

o в VBScript — большие ограничения при работе с библиотеками типов (не все типы данных поддерживаются, объектная модель должна соответствовать правилам Automation , константы без объявления их в теле скрипта использовать нельзя). Некоторые из этих ограничений можно обойти при помощи возможностей XML в файлах *. wsf .

Далее — самые важные моменты про основные элементы программ на VBScript.

Получить результат выполнения скриптов из IE

Добрый день, коллеги.

Облазил миллион форумов в т.ч. иноязычных, и совсем отчаялся получить ответ. Хотя проблема, на первый взгляд, элементарная.

В текстовую переменную нужно получить тект HTML страницы. Функция вида: str$ = getText(url)

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

Неужели нет более простого и изящного инструмента для того, чтобы тупо сграбить текст из браузера?

Java Script VB Script
04.04.2015, 16:47

Приоритет выполнения и прерывание скриптов
Спасибо всем, кто обратил внимание на тему. Есть 2 скрипта, №2 запускается по событию и его.

Получить результат выполнения JavaScript’a
Доброго времени суток, есть сайт, на котором всего одна кнопка и несколько textbox’ов. В OnClick.

Получить результат выполнения метода
Доброго времени суток! Помогите разобраться с проблемой, пожалуйста. В ООП только начала.

Как получить результат выполнения функции
Как в делфи 7 можно получить результат выполнения функции на web-странице без использования.

Получить из Oracle в Access результат выполнения процедуры
Добрый день всем! В книге вычитал, что запросы напрямую к серверу в Access (dbSQLPassThrough).

04.04.2015, 17:03 2
Visual Basic
04.04.2015, 17:35 [ТС] 3

К сожалению, в результате работы кода строчки «No odds found» нет, выдается все тот же код, а не текст страницы:

04.04.2015, 18:33 4

Решение

Freshman1976, Получить текст страницы можно, например, так :

Visual Basic
04.04.2015, 18:33
04.04.2015, 18:39 [ТС] 5
04.04.2015, 21:05 6
04.04.2015, 21:25 7
05.04.2015, 01:05 [ТС] 8

Друзья, все оказалось значительно проще, дело даже не в том, как к браузеру прикручивать, я обошелся в своем коде без этого:


Золото оказалось для меня вот тут — .Document.Body.InnerText. В своих поисках я пошел по ложному пути, в итоге завел меня этот путь аж до Селениума, а оказалось, что нужно было копать в другом направлении

В итоге все работает, еще раз спасибо, тему можно закрыть.

Добавлено через 7 минут
ЗЫ. Возможно проблема была еще и в том, что «No odds found» появляется в тексте getText$ не сразу после выполнения

Visual Basic

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

Урок 1 по VBScript: Синтаксис vbs сценариев

В этом начальном уроке, мы изучим синтаксис vbscript языка. Синтаксис языка vbscript является таким же как и в языке Visual Basic и фактически, является подмножеством данного языка программирования. Основной упор в использовании vbscript – это возможность написания сценариев (расширение vbs) с открытым кодом для платформы Windows. Пользователю не нужно прибегать к установке дополнительного программного обеспечения, так как все сценарии выполняются под управлением сервера сценариев Windows Script Host.

И так, давайте рассмотрим базовый синтаксис vbscipt и его возможности.

  • Комментарии – для комментирования строк кода можно использовать ключевое слово REM , или одинарную кавычку (‘).
  • Строки кода – что бы произвести перенос одной строки на несколько, используется символ подчёркивания.
  • Переменные – для объявления переменных используется ключевое слово Dim . Более детально, работу с ними я рассмотрел в статье «Урок 2 по VBScript: Переменные»

Можно прописать несколько операторов в одну строчку, для этого используется знак двоеточия (:). Сам язык нечувствителен к регистру символов.

Хорошо, давайте рассмотрим синтаксис языка vbscript на таком примере:

Видим, что тут, мы вначале прописали комментарии, далее объявили три переменные. Как видим, язык vbscript не требует назначения типа данных (более детально, работу с типами данных я рассмотрел в статье – «Урок 3 по VBScript: Типы данных»). В конце, для вывода данных мы использовали функцию MsgBox, в данном случае она прописана в упрощенном варианте. Давайте рассмотрим ее полный синтаксис:

MsgBox(prompt[, buttons] [, title ][, helpfile, context ] ) – видим, что тут, функции передаются пять параметров, последние два мы рассматривать не будет, так как они не являются актуальными и практически не применяются.

  • prompt – собственно, сообщение, которое надо вывести
  • buttons – позволяет задать дополнительные кнопки, их значения указываются через константы
  • title – заголовок окна

Работу с данной функцией я более детально рассмотрел в статье «Создание диалоговых окон».

Язык vbscript предоставляют также функции для работы со строками и датой, а также, ряд математических функций.

Конечно, синтаксис vbscript позволяет пользователю создавать собственные процедуры и функции. Для определения процедуры, т. е. подпрограммы, которая не возвращает никакого значения, в VBScript используется конструкция Sub . End Sub. После ключевого слова Sub идёт имя процедуры, а в круглых скобках указывается список её пара­метров, например:

Sub MyProcedure(Param1, Param2)
Строки кода
End Sub

Если процедура не имеет параметров, то в скобках после имени ничего ука­зывать не нужно:

Sub MyProcedure()

End Sub

Вызывать процедуру из сценария можно двумя способами. Во-первых, мож­но просто написать имя и указать через пробел список передаваемых параметров, например: MyProcedure 3,10. Во-вторых, можно использовать специальный оператор Call , при этом спи­сок параметров обязательно должен быть заключен в круглые скобки: Call MyProcedure(3,10) .

Для определения функции, т. е. подпрограммы, которая возвращает опреде­ленное значение, применяется конструкция Function . End Function. Как и при описании процедур, после названия функции в круглых скобках указывается список её параметров, например:

Function MyFunction(Param1, Param2) … End Function

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

Function MyFunction(Param1, Param2)
Dim Sum
Sum = Paraml+Param2
MyFunction = Sum
End Function

Если возвращаемое функцией значение не нужно присваивать никакой пе­ременной, то функция вызывается так же, как и процедура — пишется имя этой функции и через пробел указывается список ее аргументов: MyFunction 3,5

Если же необходимо записать значение в какую-либо переменную, то аргументы функции заключаются в круглые скобки.

Вот простой пример синтаксиса vbscript для использования собственных процедур и функций:

Помимо процедур и функций, можно создавать собственные массивы (Урок 9 по VBScript: Массивы) и классы (Урок 8 по VBScript: Объекты и классы)

Ну что же, вдобавок, хотелось бы упомянуть две очень полезные функции:

  • Hex(number ) – функция позволяет получить 16-ричное значение для числа number
  • Oct(number) — функция позволяет получить 8-ричное значение для числа number

Смотрим на третий пример:

Спасибо за внимание. Автор блога Владимир Баталий

Visual basic html = vbscript виды процедур

Основы программирования на VBScript

VBScript — это язык сценариев, который предназначен для разработки интерактивных WEB -страниц. Коды VBScript загружаются в HTML документ, после чего браузер осуществляет выполнение этого сценария.

Кроме того, для обеспечения защиты из VBScript были изъяты возможности доступа к жестким дискам и операционной системе. Т.к. WEB — страницы запускаются на ПК пользователя, то этим исключается возможность испортить что-либо на его ПК при запуске WEB -страницы.

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

Для вставки сценария в HTML документ предназначен тег Script . Атрибут Language определяет язык сценария. Для языка VBScript следует указать

Для языка JavaScript следует указать

HTML страницы могут содержать стандартные элементы управления: текстовые поля, кнопки, переключатели и другие. Для внедрения элементов управления на Web -страницу предназначен тег Input .

Пример вставки текстового поля.

Input Type = text Name =” txt 1” value =”АИС”>

Атрибут Type определяет тип элемента управления.

Атрибут Name определяет имя элемента управления, которое используется при написании сценариев.

Атрибут Value определяет исходное содержание текстового поля.

Атрибут Size определяет размер поля в символах.

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

Для вставки флажка тег Input имеет вид:

Каждый раз, когда пользователь щелкает на флажок, состояние элемента меняется на противоположное. Для исходной установки флажка используется атрибут Checked . Checked =1, если флажок установлен, и наоборот, если Checked =0, флажок сброшен.

Для вставки переключателя тег Input имеет вид:

В группе может быть установлен только один переключатель.

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

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

При каждом нажатии на кнопку происходит событие kn 1_ onClick .

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

HEAD > TITLE >Пример странички с VBScript TITLE >

В данном примере на Web -страницу вставлена кнопка, а сценарий запускается при щелчке на кнопку. Экрана обозревателя после загрузки Web -страницы представлен на рисунке 1.

Visual basic html = vbscript виды процедур


Скрипты на языке VBScript чаще всего используются в следующих областях, использующих продукцию Microsoft:

Такой тип сценариев обычно используется для:

  • создания сложных сценариев;
  • использования объектов из других приложений и библиотек;
  • скрытия окон в ходе выполнения сценария;
  • шифрования логики сценария.

В основном VBS-сценарии применяются для обработки данных, управления системой, работы с учетными записями пользователей и компьютеров, взаимодействия с офисными приложениями, работы с базами данных и прочих сложных задач.

VBS-сценарий — это обычный текстовый файл с расширением *.vbs, который легко править в блокноте, а запускать на исполнение — двойным щелчком мыши или вызовом по имени в консоли.

Сценарии не компилируются, а интерпретируются. То есть для обработки скрипта в системе должен присутствовать интерпретатор языка VBS, и таких интерпретаторов в Windows два: оконный WScript и консольный CScript, оба интерпретатора это Windows Script Host (WSH).

Правила языка

В Visual Basic работают следующие правила:

  • длина строки не ограничена;
  • регистр символов не учитывается;
  • количество пробелов между параметрами не учитывается;
  • строку команды можно разрывать, а на месте разрыва нужно вставлять символ » _ «;
  • максимальная длина имени переменной 255 символов;
  • комментарии обозначаются символом » ‘ «.
  • несколько строк можно объединять в одну, предварительно разделив их символом » : «

Переменные

По умолчанию переменные в сценариях объявляются автоматически при первом использовании в теле скрипта, если это не запрещено директивой Option Explicit. Если же в начале сценария объявить директиву Option Explicit, то все переменные нужно определять заранее с помощью следующих конструкций:

Константы объявляются в начале сценария с помощью конструкции:

Тип переменной присваивается автоматически после внесения в неё первого значения. В Visual Basic существуют следующие типы данных:

  • empty — неинициализированная переменная;
  • null — пустая переменная;
  • boolean — логический тип, возможные значения: False, True или 0, 1;
  • byte — 8-битное целое число без знака, возможные значения: 0 .. 255;
  • integer — 16-битное целое число, возможные значения: −32768 .. 32767;
  • long — 32-битное целое число, возможные значения: −2147483648 .. 2147483647;
  • currency — денежный тип, возможные значения: −922337203685477,5808 до 922337203685477,5807;
  • single — число с плавающей точкой, возможные значения: −3.402823e38 .. −1.401298e-45 для отрицательных чисел и 1.401298e-45 .. 3.402823e38 для положительных чисел;
  • double — число с плавающей точкой, возможные значения: −1.79769313486232e308 .. −4.94065645841247e-324 для отрицательных чисел и 4.94065645841247e-324 .. 1.79769313486232e308 для положительных чисел;
  • date — дата, возможные значения: 01.01.1900 .. 31.01.9999;
  • string — строковая переменная, вместимость до 2 миллиардов символов;
  • object — указатель на объект;
  • error — код ошибки.

В VBS-сценариях возможно использование массивов переменных, которые позволяют хранить списки, таблицы и даже более сложные конструкции. Одномерные массивы (списки) могут быть динамическими, то есть они позволяют изменять свой размер в ходе работы сценария. Все массивы объявляются командой Dim:

Объекты, их методы и свойства

VBScript, как и их родитель — язык Visual Basic, является объектно-ориентированным языком программирования, то есть основной концепцией является понятие объектов и классов

Класс — это тип, описывающий устройство объектов. Объект подразумевает под собой нечто, что обладает определённым поведением и способом представления, объект — это экземпляр класса. Класс можно сравнить с чертежом, согласно которому создаются объекты. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.

Все объекты, с которыми работает Windows Script Host, имеют методы и свойства. Чтобы обратиться к методу, необходимо указать объект, а через точку — метод с необходимыми параметрами.

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

Пример

Вот пример небольшой программы на языке VBScript, которая выводит диалоговое окно с сообщением (символы после знака апостроф являются комментариями):

По эффекту работы она аналогична прямой инструкции

См. также

  • Visual Basic for Applications
  • JScript — альтернативный скриптовый язык, созданный компанией Microsoft на основе EcmaScript

Ссылки

  • VBScript (англ.) — Руководство по VBScript от Майкрософт.
  • The Script Center Script Repository (англ.) — Коллекция скриптов на VBScript от Майкрософт.
  • Форум по Visual Basic и VBS — русскоязычный форум посвящённый программированию на Visual Basic 6.0 и VBA, .Net, VBS, ASP.Net.
  • Visual Basic FAQ — База готовых кодов на Visual Basic. Часто задаваемые вопросы.
  • [1] — Плейлист на YouTube с кратким обучением VBS
  • [2] — Русскоязычный ресурс, посвященный программированию на различных макроязыках и в скриптовых средах, в том числе и в VBSE.
  • [3] — CHM-файл справки на русском языке описывает свойства и методы объектов Windows Script Host, а также некоторых других объектов OLE Automation.
Visual Basic
Компоненты Microsoft Windows
Основные

Aero • ClearType • Диспетчер рабочего стола • DirectX • Панель задач (Пуск • Область уведомлений) • Проводник (Пространство имён • Специальные папки • Ассоциации файлов) • Windows Search (Smart folders • iFilters) • GDI • WIM • SMB • .NET Framework • XPS • Active Scripting (WSH • VBScript • JScript) • COM (OLE • DCOM • ActiveX • Структурированное хранилище • Сервер транзакций) • Теневая копия • WDDM • UAA • Консоль Win32

Службы
управления
Приложения

Контакты • DVD Maker • Факсы и сканирование • Internet Explorer • Журнал • Экранная лупа • Media Center • Проигрыватель Windows Media • Программа совместной работы • Центр устройств Windows Mobile • Центр мобильности • Экранный диктор • Paint • Редактор личных символов • Удалённый помощник • Распознавание речи • WordPad • Блокнот • Боковая панель • Звукозапись • Календарь • Калькулятор • Ножницы • Почта • Таблица символов • Исторические: Movie Maker • NetMeeting • Outlook Express • Диспетчер программ • Диспетчер файлов • Фотоальбом

Chess Titans • Mahjong Titans • Purble Place • Пасьянсы (Косынка • Паук • Солитер) • Сапёр • Пинбол • Червы

Autorun.inf • Фоновая интеллектуальная служба передачи • Файловая система стандартного журналирования • Отчёты об ошибках • Планировщик классов мультимедиа • Теневая копия • Планировщик задач • Беспроводная настройка

Active Directory • Службы развёртывания • Служба репликации файлов • DNS • Домены • Перенаправление папок • Hyper-V • IIS • Media Services • MSMQ • Защита доступа к сети (NAP) • Службы печати для UNIX • Удалённое разностное сжатие • Службы удаленной установки • Служба управления правами • Перемещаемые профили пользователей • SharePoint • Диспетчер системных ресурсов • Удаленный рабочий стол • WSUS • Групповая политика • Координатор распределённых транзакций

NT • Диспетчер объектов • Пакеты запроса ввода/вывода • Диспетчер транзакций ядра • Диспетчер логических дисков • Диспетчер учетных записей безопасности • Защита ресурсов • lsass.exe • csrss.exe • smss.exe • spoolsv.exe • Запуск

Безопасность
Совместимость
API и фреймворки Microsoft
Графика Desktop Window Manager · Direct2D · Direct3D (extensions) · GDI / GDI+ · WPF · Windows Color System · Windows Image Acquisition · Windows Imaging Component
Аудио DirectMusic · DirectSound · DirectX plugin · XACT · Speech API · XAudio2
Мультимедиа DirectX (Media Objects · Video Acceleration) · DirectInput · DirectShow · Image Mastering API · Managed DirectX · Media Foundation · XNA · Windows Media · Video for Windows
Web MSHTML · RSS Platform · JScript · VBScript · BHO · XDR · SideBar Gadgets
Доступ к данным Data Access Components · Extensible Storage Engine · ADO.NET · ADO.NET Entity Framework · Sync Framework · Jet Engine · MSXML · OLE DB · OPC
Сеть Winsock (LSP) · Winsock Kernel · Filtering Platform · Network Driver Interface Specification · Windows Rally · BITS · P2P API · MSMQ · MS MPI · DirectPlay
Коммуникации Messaging API · Telephony API · WCF
Win32 console · Windows Script Host · WMI (extensions) · PowerShell · Task Scheduler · Offline Files · Shadow Copy · Windows Installer · Error Reporting · Event Log · Common Log File System
Компонентная модель COM · COM+ · ActiveX · Distributed Component Object Model · .NET Framework
Библиотеки Base Class Library (BCL) · Microsoft Foundation Classes (MFC) · Active Template Library (ATL) · Windows Template Library (WTL)
Драйверы устройств Windows Driver Model · Windows Driver Foundation (KMDF · UMDF) · WDDM · NDIS · UAA · Broadcast Driver Architecture · VxD
Безопасность Crypto API (CAPICOM) · Windows CardSpace · Data Protection API · Security Support Provider Interface (SSPI)
.NET ASP.NET · ADO.NET · Base Class Library (BCL) · Remoting · Silverlight · TPL · WCF · WCS · WPF · WF
Программное обеспечение EFx Factory · Enterprise Library · Composite UI · CCF · CSF
IPC MSRPC · Dynamic Data Exchange (DDE) · Remoting · WCF
Доступность Active Accessibility · UI Automation
DirectWrite · Text Services Framework · Text Object Model · Input method editor · Language Interface Pack · Multilingual User Interface · Uniscribe

Wikimedia Foundation . 2010 .

Смотреть что такое «Visual Basic Scripting Edition» в других словарях:

Visual Basic Scripting Edition — Visual Basic Scripting Edition, ein Bestandteil der Makro /Programmiersprache Visual Basic for Applications, der für das Programmieren in einer Webumgebung konzipiert ist … Universal-Lexikon

Visual Basic Scripting Edition — programming language developed by Microsoft that is based on Visual Basic and supported by the Internet Explorer browser (enables features similar to Java, such as interactive buttons, scrolls, etc … English contemporary dictionary

Visual Basic — Не следует путать с Visual Basic .NET. Visual Basic Класс языка: процедурный, объектно ориентированный, компонентно ориентированный Тип исполнения: компилируемый, интерпретируемый Появился в: 1991 … Википедия

Visual Basic .Net — Basisdaten Paradigmen: prozedural, vollständig objektorientiert Erscheinungsjahr: 2002 Entwickle … Deutsch Wikipedia

Visual Basic 6.0 — Visual Basic .NET Basisdaten Paradigmen: prozedural, vollständig objektorientiert Erscheinungsjahr: 2002 Entwickle … Deutsch Wikipedia


Visual Basic — NET Basisdaten Paradigmen: prozedural, vollständig objektorientiert Erscheinungsjahr … Deutsch Wikipedia

Visual Basic for Applications — (VBA) Paradigm(s) Multi paradigm Appeared in 1993 Developer Microsoft … Wikipedia

Visual Basic — This article is about the Visual Basic language shipping with Microsoft Visual Studio 6.0 or earlier. For the Visual Basic language shipping with Microsoft Visual Studio .NET or later, see Visual Basic .NET. Visual Basic Paradigm(s) Object based… … Wikipedia

Visual Basic — Cet article concerne le langage Visual Basic, commercialisé avec Microsoft Visual Studio 6.0 et antérieur. Pour la version de Visual Basic commercialisée avec Microsoft Visual Studio .Net, voir Visual Basic .NET. Visual Basic Auteur … Wikipédia en Français

VBScript. Основы VBScript

Содержание

Основы VBScript

Типы данных

В языке VBScript используется единственный тип данных – Variant (Вариант), который позволяет хранить в переменной число, строку, дату, булевское значение, ссылку на объект и другую информацию. Определить тип содержимого переменной можно с помощью набора функций: VarType, TypeName, IsArray, IsDate, IsEmpty, IsNull, IsNumeric, IsObject, которые будут рассмотрены ниже. Тип содержащейся информации еще называется подтипом варианта. Полный список подтипов приведен в следующей таблице:

Подтип Описание
Empty Переменной не присвоено значение. При использовании неинициализированной переменной в числовых выражениях, будет подставляться 0, а в строковых – пустая строка.
Null Переменная не содержит данных.
Boolean Булевская переменная может принимать значения True, или False.
Byte Целое число в диапазоне от 0 до 255.
Integer Целое число в диапазоне от -32 768 до 32 767.
Currency Число с фиксированной точкой в диапазоне от -922 337 203 685 477.5808 до 922 337 203 685 477.5807.
Long Целое число в диапазоне от -2 147 483 648 до 2 147 483 647.
Single Число с плавающей точкой одинарной точности. Для отрицательных значений допустимый диапазон

от -3.402823E38 до -1.401298E-45. Для положительных – от 1.401298E-45 до 3.402823E38.

Double Число с плавающей точкой двойной точности. Для отрицательных значений допустимый диапазон от

-79769313486232E308 до -4.94065645841247E-324. Для положительных — от 4.94065645841247E-324 до 1.79769313486232E308.

Date (Time) Содержит число, представляющее дату в диапазоне от 1-го января 100 года, до 31 декабря 9999 года.
String Последовательность символов. Максимальная длина в районе 2-х миллиардов знаков.
Object Объект.
Error Номер ошибки.

В зависимости от выражения, в котором участвует переменная, ее содержимое будет автоматически приведено к нужному типу. Рассмотрим такой пример:

Так как в выражении участвует числовая переменная A, интерпретатор преобразует значение переменной B из строки «12» в число и просуммирует их:

Изменим макрос так, чтобы переменная А тоже содержала строку:

Запустим его на выполнение. Теперь на экране появится результат слияния (конкатенции) двух строк, а не сумма их числовых представлений:

Во избежании путаницы с автоматическим приведением типов, рекомендуется использовать функции конверсии: CBool, CByte, CCur, CDate, CDbl, CInt, CLng, CSng, CStr.

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

Переменные

Переменная – это удобное символьное обозначение области памяти, где приложение хранит некоторые данные. В процессе выполнения приложения значение переменной может изменяться. Перед использованием переменную следует объявить с помощью оператора Dim.

С помощью одного оператора можно объявить сразу несколько переменных, если перечислить их имена через запятую:

При объявлении нет необходимости в указании типа данных, так как все переменные имеют тип Variant.

Если в первой строке текста скрипта не указано Option Explicit, то использовать переменные можно без объявления. Но, такой путь может привести к трудно выявимым ошибкам. Достаточно один раз ошибиться в написании имени переменной в тексте программы, чтобы получить непредсказуемый результат. Мы рекомендуем всегда указывать Option Explicit и объявлять переменные.

Имя переменной должно соответствовать следующим требованиям:

  1. Начинаться с символа латинского алфавита;
  2. Состоять только из символов латинского алфавита или из символов латинского алфавита и цифр;
  3. Не превышать 255 символов в длину;
  4. Быть уникальным в пределах своей области видимости.

Область видимости и время жизни

Область видимости переменной определяется тем, где она была объявлена. Если внутри тела процедуры [1] , то такая переменная называется локальной и доступна только в пределах этой процедуры. Если переменная объявлена в тексте скрипта, то она будет видима для всех процедур или функций определенных в этом скрипте. Локальные переменные могут иметь одинакове имена, если объявлены в разных процедурах.

В дереве Проводника окна Редактора скрипт-объектов присутствует специальный раздел – Константы и переменные – для объявления глобальных переменных, видимых для всех скрипт-функций проекта.

Интерпретатор выделяет память для локальных переменных в момент их объявления и высвобождает по выходу из процедуры. Глобальные переменные существуют с момента их объявления и пока скрипт не закончит свое выполнение. Применительно к Гедымину это означает, что глобальные переменные существуют на протяжении всего времени выполнения программы.

Присваивание значения переменной

Значение объявленной переменной присваивается с помощью оператора =. Имя переменной указывается слева от оператора, новое значение – справа. Например:

Скалярные переменные и массивы

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

В языке VBScript левая граница индекса массива всегда 0. Таким образом размер массива вычисляется, как число указанное в скобках плюс один. При присваивании значения элементу массива следует указать его индекс в круглых скобках:

Аналогично, при обращении к значению элемента мы используем его индекс:

Массив не обязательно должен быть одномерным. VBScript позволяет нам задать до 60 размерностей при объявлении массива. Например, следующий оператор создаст двумерный массив из 12 строк и двух колонок [2] :

При обращении к элементам многомерного массива следует указывать все индексы:

Выше мы объявляли массивы, размер которых не меняется в процессе работы программы. Если заранее не известно сколько элементов понадобится, то можно объявить динамический массив:

Перед использованием следует установить размер динамического массива с помощью оператора ReDim:

В процессе выполнения можно вызывать оператор ReDim многократно, каждый раз изменяя размер массива. Опция Preserve сохраняет значения элементов массива при изменении размера. Например, следующий код увеличит объявленный выше массив на пять элементов, оставив существующие нетронутыми:

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

Константы

Правилом хорошего тона является объявление констант для многократно используемых в тексте программы значений. Грамотно присвоенное имя константы улучшает читабельность, а само использование — упрощает процесс внесения изменений в код. В отличие от переменных, значение константы нельзя изменить в процессе выполнения программы. Создание константы происходит с помощью оператора Const:

Несколько констант могут быть объявлены в рамках одного оператора, через запятую. Как и переменная, константа обладает своей областью видимости в зависимости от того, где (в процедуре или за ее пределами) и как (Public или Private) она была объявлена. Константы, созданные оператором Const без указания Public или Private являются общедоступными по-умолчанию.

В дереве Проводника окна Редактора скрипт-объектов присутствует специальный раздел – Константы и переменные – для объявления глобальных констант, видимых для всех скрипт-функций проекта.

Значения строковых констант заключаются в двойные кавычки.

Значения типа Дата следует обрамлять символами решетки (#) и использовать американский формат: месяц/день/год. Например:

Во избежание путаницы между константами и переменными рекомендуется использовать единый префикс для всех констант, например «con», или набирать имя константы в верхнем регистре.

Для облегчения труда программиста VBScript содержит набор предопределенных констант.

Операторы

Операторы VBScript подразделяются на пять категорий: арифметические, сравнения, слияния, логические и присваивания.

Арифметические операторы

Оператор Пример использования Описание
^ number ^ exponent Возводит number в степень exponent. Number может быть меньше нуля только в случае целочисленной степени. Если один из операндов Null, все выражение принимает значение Null. Если несколько возведений в степень выполняются подряд, результат вычисляется слева направо.
* number1 * number2 Произведение двух чисел. Если операнд имеет значение Empty, то он принимается равным нулю. Если хотя бы один из операндов Null, все выражение принимает значение Null.
/ number1 / number2 Вещественное деление двух чисел. Для операндов действуют правила аналогично оператору умножения.
\ number1 \ number2 Целочисленное деление. Перед вычислением оба операнда приводятся к типу Byte, Integer или Long. В остальном действуют правила как для оператора деления.
Mod number1 Mod number2 Остаток от целочисленного деления. Приведение операндов к целому, а также правила обращения с Empty и Null, как у целочисленного деления.
+ expression1 + expression2 Если оба операнда числа, результатом является их арифметическая сумма. Если оба операнда строки – слияние (конкатенция) двух строк. Если один операнд число, а другой строка, то строковый операнд будет преобразован в число и прибавлен к числовому. Если хотя бы один из операндов Null, все выражение принимает значение Null. Если оба операнда Empty, результат имеет целочисленное значение 0. Если только один оператор Empty, в качестве результата возвращается значение второго операнда.
number1 – number2 или — number В первом случае возвращает разность двух чисел. Во втором – инвертирует знак числа. Правила для операндов со значениями Null и Empty, как для оператора умножения.

Операторы сравнения

Формат использования операторов сравнения:

где используются следующие операторы сравнения: (больше), >= (больше или равно), = (равно), <> (не равно).

В зависимости от типов и значений операндов, сравнение осуществляется следующим образом:

Если То
Оба операнда числа. Выполняется сравнение двух чисел.
Оба операнда строки. Выполняется сравнение двух строк.
Один из операндов число, а второй строка. Строковый операнд приводится к числу и выполняется сравнение двух чисел.
Один из операндов Empty, а второй число. Операнд со значением Empty принимается равным 0.
Один из операндов Empty, а второй строка. Операнд со значением Empty принимается равным пустой строке «». Осуществляется сравнение двух строк.
Оба операнда Empty. Операнды считаются равными.
Хотя бы один из операндов Null. Результат принимает значение Null.

Специальный оператор Is применяется для сравнения двух объектных переменных и возвращает Истину, если обе переменных ссылаются на один и тотже экземпляр объекта.

Операторы конкатенции


В данной категории находятся два оператора: + и &. Первый подробно описан в разделе «Арифметические операторы» выше. Рассмотрим использование оператора &.

Если операнд не является строкой, он приводится к строковому типу. Если оба операнда Null, то результат также принимает значение Null, однако, в отличие от остальных операторов, если только один операнд Null, то он принимается равным пустой строке. Операнд, имеющий значение Empty, также воспринимается как пустая строка «».

Логические операторы

VBScript предоставляет нам следующие логические операторы:

  1. Логическое отрицание, инверсия (Not);
  2. Логическое умножение, коньюнкция (And);
  3. Логическое сложение, дизьюнкция (Or);
  4. Логическое исключение (Xor);
  5. Логический эквивалент (Eqv);
  6. Логическая импликация (Imp).

В качестве операндов логических операторов могут выступать булевские выражения или числовые значения. В первом случае результатом будет булевская константа, во втором – число. В зависимости от оператора подача на вход одного или двух значений Null может приводить к Null результату. Оператор Not является унарным и возвращает логическое отрицание выражения. Над числовым операндом оператор Not производит побитовую инверсию. Остальные логические операторы являются бинарными. В таблице ниже приведены результаты выполнения каждого из операторов в зависимости от значения операндов Exp1 и Exp2:

Exp1 Exp2 And Or Xor Eqv Imp
True True True True False True True
True False False True True False False
False True False True True False True
False False False False False True True
True Null Null True Null Null Null
False Null False Null Null Null True
Null True Null True Null Null True
Null False False Null Null Null Null
Null Null Null Null Null Null Null

В жизни чаще всего используются операторы And и Or и гораздо реже – Xor. Нам не приходилось сталкиваться с использованием на практике операторов Eqv и Imp. Если вам тяжело разбираться с приведенной выше таблицей резюмируем действие данных операторов:

  • And принимает значение Истина только если оба операнда Истина. В любом другом случае – это либо Ложь, либо Null.
  • Or принимает значение Истина, если хотябы один из операндов Истина.
  • Xor принимает значение Истина, если значения операндов различаются и Ложь, если они одинаковы.

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

Exp1 Exp2 And Or Xor Eqv Imp
1 1
1 1 1 1
1 1 1
1 1 1 1 1 1

Оператор присваивания

Оператор присваивания (=) подробно описан в разделе «Переменные».

Очередность применения операторов

Если выражение содержит несколько операторов, то они применяются в соответствии с установленным порядком, который называется приоритетом операторов. Изменить порядок по-умолчанию можно с помощью круглых скобок. Выражение внутри скобок всегда вычисляется в первую очередь.

В выражении, содержащем операторы разных категорий, арифметические действия выполняются в первую очередь, затем выполняются операторы сравнения и, в последнюю очередь, — логические операторы. Все операторы сравнения имеют одинаковый приоритет и вычисляются слева-направо. Арифметические и логические операторы вычисляются в следующем порядке:

  1. Возведение в степень (^);
  2. Смена знака числа, унарный минус (-);
  3. Умножение (*) и деление (/);
  4. Целочисленное деление (\);
  5. Остаток от целочисленного деления (Mod);
  6. Сложение (+) и вычитание (-);
  7. Слияние строк (&).

Если умножение и деление встречаются в одном выражении, то операции выполняются в порядке следования слева-направо. Аналогичное правило действует в случае одновременного присутствия операторов сложения и вычитания.

Оператор слияния строк (&) не является арифметическим и по приоритету располагается между арифметическими операторами и операторами сравнения.

Очередность для логических операторов установлена следующая:

  1. Логическое отрицание, инверсия (Not);
  2. Логическое умножение, коньюнкция (And);
  3. Логическое сложение, дизьюнкция (Or);
  4. Логическое исключение (Xor);
  5. Логический эквивалент (Eqv);
  6. Логическая импликация (Imp).

Условные выражения

Условные выражения применяются для управления порядком выполнения команд программы и позволяют организовать переходы (ветвления) и повторения команд. Как правило, операторы сравнения используются вместе с условными выражениями.

Выражение If..Then..Else

Выражение условного перехода If позволяет выполнить ту или иную группу команд в зависимости от результата логического выражения или значения булевской переменной.

Для выполнения единственной команды при выполнении заданного условия используется однострочный синтаксис выражения:

Обратите внимание, что секция Else в этом случае опущена. Для выполнения группы операторов следует заключить их между ключевыми словами Then и End If.

Если при выполнении условия требуется выполнить один код, а при невыполнении – другой, то используется синтаксис выражения с секцией Else:

При необходимости выбора из нескольких альтернатив подойдет синтаксис с конструкцией ElseIf:

Выражения If могут быть вложенными:

Хотя количество секций ElseIf в условном выражении не ограничено, интенсивное их использование может привести к запутанному, неудобочитаемому коду. В случае выбора одной альтернативы из множества возможных в зависимости от значения некоторого селектора рекомендуется использовать выражение Select Case.

Выражение Select..Case

Перепишем пример с днями недели с использованием выражения выбора:

Так как выражение селектора вычисляется только один раз, использование Select..Case приводит к более эффективному коду. Рекомендуется всегда использовать секцию Case Else для отлавливания некорректных или необработанных значений селектора.

Операторы цикла

Довольно часто возникает ситуация, когда код требуется запустить повторно. Для этого следует написать оператор цикла, который повторяет определенные команды снова и снова. Операторы цикла используются во многих ситуациях: при вычислении итоговой суммы по списку чисел, перемещении по записям набора данных или для запуска блока кода для нескольких объектов. Существует несколько циклов, описанных в следующих разделах. Некоторые из них выполняются, пока условие имеет значение Истина, некоторые – пока Ложь. И, наконец, есть такие, которые выполняются заданное число раз.

Оператор Do..Loop

Данный оператор предназначен для выполнения группы команд пока заданное условие Истинно или до тех пор, когда оно не станет Истинным. Проверка условия может осуществляться как в начале цикла:

Команда Exit Do может встречаться неограниченное число раз в теле цикла. Обычно она используется вместе с условным выражением If..Then и позволяет передать управление на оператор, следующий непосредственно за циклом. При использовании Exit Do внутри вложенного цикла, управление перейдет во внешний цикл.

Следующий код позволяет заменить игральный кубик:

While..Wend

Представляет собой усеченную версию оператора Do..Loop и позволяет выполнять группу команд пока условие Истинно. Синтаксис оператора:

Обратите внимание, что Exit Do не действует внутри данного цикла. Циклы While..Wend могут быть вложенными.

For..Next

Данный цикл повторяет заданный набор команд указанное число раз. Синтаксис оператора имеет вид:

Перед стартом цикла переменной counter присваивается значение start. Далее проверяется выполнение условия counter = 0, или counter >= end, при отрицательном шаге. После выполнение блока команд переменная counter увеличивается на значение step и все повторяется сначала.

Изменение счетчика в теле цикла не запрещено, но настоятельно не рекомендуется, так как затрудняет понимание логики программы и ее отладку.

Exit For может встречаться в теле цикла произвольное число раз. Циклы могут быть вложенными. Например, такой цикл инициализирует трехмерный массив:

For Each..Next

Оператор цикла For Each..Next повторяет заданный набор команд для каждого элемента массива или коллекции и имеет следующий синтаксис:

Цикл выполняется, если в массиве или коллекции присутствует хотябы один элемент. Exit For может встречаться в теле цикла произвольное количество раз.

Проиллюстрируем использование For Each..Next на примере следующего кода, который выводит на экран список файлов из корневого каталога диска с:\

Процедуры

Для экономии памяти и структурирования программы, фрагмент кода, вызываемый многократно в разных местах, может быть оформлен ввиде процедуры. В языке VBScript существуют два вида процедур: подпрограммы (Sub) и функции (Function). Подпрограмма – это последовательность операторов, обрамленная ключевыми словами Sub и End Sub. Подпрограмма может принимать на вход параметры, но не возвращает значения. Функция – последовательность операторов, заключенная между Function и End Function, — возвращает результат и поэтому может быть использована в выражении. Каждая процедура должна иметь имя, уникальное в пределах модуля. Имена процедур, объявленных в глобальном модуле, должны быть уникальны в рамках всего проекта.

Определение подпрограммы и функции имеет следующий синтаксис:

Public процедуры являются глобальными и доступны во всех скриптах программы. Private процедуры доступны только в том скрипте, где они были объявлены. Если не указано иное, объявленная процедура является общедоступной. Ключевое слово Default может быть использовано только в теле класса и служит для указания метода по-умолчанию этого класса.

Список параметров имеет следующий синтаксис:

Параметры могут передаваться по значению (ByVal) или по ссылке (ByRef). По-умолчанию все параметры передаются по значению. Константы, результаты вычисления выражений могут быть переданы только по значению. Изменение параметра, переданного по ссылке, приведет к изменению значения наружной переменной. Поясним передачу параметров внутрь процедуры на следующем примере:


Переменные, объявленные внутри тела процедуры, являются локальными и уничтожаются по завершении ее выполнения. Значения локальных переменных не сохраняются.

Список параметров указывается в круглых скобках при вызове функции или при вызове подпрограммы с помощью оператора Call [3] . Так, вызов процедуры DoCalculation в приведенном выше примере мы могли написать следующим образом:

Выражение Execute

Классы VBScript

VBScript позволяет создавать новые классы, которые в дальнейшем мы будем называть VB классами. Вообще говоря, полноценными классами в понимании объектно-ориентированного программирования они не являются, поскольку не поддерживают наследование и, соответственно, полиморфизм. Так что из трех китов, на которых базируется объектно-ориентированная парадигма остается только инкапсуляция — возможность объединять в рамках одной сущности данные и методы.

Определение класса осуществляется с помощью следующей конструкции:

где name — это имя класса, а statements — это одно или несколько определений переменных, свойств, процедур или функций, называемых так же членами класса. Обратите внимание, что в отличие от Delphi, где код определения класса содержит только объявления процедур и функций, в VB классе код членов прописывается прямо в тексте класса.

Члены класса могут быть объявлены как Private или Public. Первые видны только внутри кода данного класса, вторые же доступны как для внутреннего кода, так и снаружи. Если переменная или функция (процедура) не содержат явного определения Public или Private, то они считаются общедоступными. Процедуры или функции объявленные как Public внутри блока класса становятся методами данного класса.

Переменные, объявленные как общедоступные, становятся свойствами класса наравне со свойствами объявленными непосредственно с помощью конструкций Property Get, Property Let, Property Set.

Определение свойств класса

Выше мы уже говорили о том, что поля класса явно или не явно объявленные как Public, становятся его свойствами. Кроме этого, создать свойство класса можно определив специальные функции для считывания значения свойства (Property Get), а также для его присвоения (Property Let или Property Set).

Синтаксис определения таких функций следующий:

Определив только одну функцию, считывания или присвоения, можно создать свойство, соответственно, только для чтения или записи. Процедура Property Let используется для присвоения простых типов данных, а Property Set для передачи ссылки на объект. Обратите внимание, что все три функции могут принимать на вход произвольный список параметров. Таким образом можно организовать, например, свойства-массивы, передавая в качестве аргумента индекс элемента.

Создание и уничтожение экземпляра VB класса

Создание экземпляра VB класса осуществляется с помощью оператора New.

Уничтожение ранее созданного экземпляра происходит автоматически по завершении блока кода, где была объявлена соответсвующая переменная и при условии, что на нее нет внешних ссылок. Если необходимо уничтожить экземпляр вручную, то необходимо присвоить значение Nothing переменной.

События Initialize и Terminate

Событие Initialize происходит при создании экземпляра класса, а Terminate — при его уничтожении. Разработчик может определить свои обработчики данных событий. Ниже приведен пример использования событий создания и удаления объекта:

прикладная математика

Основы программирования в Microsoft Visual Basic Scripting

В данной статье поговорим о VBScript. Рассмотрим следующие вопросы: — что такое VBScript?; — кому это нужно и для чего?; — пример программ на VBScript; — сравнение VBScript и JavaScript.

Википедия говорит, что VBScript (Visual Basic Scripting Edition) – это скриптовый язык программирования, интерпретируемый компонентом Windows Script Host. Он широко используется при создании скриптов в операционных системах семейства Microsoft Windows. Если сказать немного проще, то VBScript – это файл с расширением vbs, который Windows воспринимается как набор инструкций. Формат этого файла – текст (*.txt). В общем, открываешь «Блокнот» и программируешь в свое удовольствие. Но может возникнуть вопрос: А кто (или что?) это все выполняет? — Ответ: сервер сценариев Windows, который ставится или обновляется вместе с Windows или с Internet Explorer.

Рассмотрим следующий вопрос, кому и для чего нужен VBScript? Ответ прост: на мой взгляд, это идеальная платформа для создания простых приложений для рутинных задач быстро и просто. Например, при каждой загрузке необходимо удалять какую-либо папку или файл, пожалуйста. Кроме этого, применяются в следующих областях, использующих продукцию Microsoft:
— автоматизация администрирования систем Windows;
— серверный программный код в страницах ASP;
— клиентские скрипты в браузере Internet Explorer.

В основном VBS-сценарии применяются для обработки данных, управления системой, работы с учетными записями пользователей и компьютеров, взаимодействия с офисными приложениями, работы с базами данными и прочих сложных задач.

Как вариант удобен для вирусописателя, как ни подло это звучит. Только при написании вирусов компиляция практически обязательна. Один из самых громких вирусов, I love you, был написан именно на VBScript, в общем, есть куда расти.

Для того, что бы программировать в среде VBScript, без компилятора, вам понадобится Notepad++, в блокноте проще, но лучше когда подсвечивается синтаксис, а также Internet Explorer, так как 80% функционала идет в комплекте с браузером. Для того, что бы программировать с компилятором, нужно установить Visual Basic Scripting Edition. VBS может запускаться в виде текстового файла, или компилированного текстового файла. В отличие от текстового файла, в котором будут видны команды, их можно редактировать, компилированный текстовый файл прочитать не удастся (сплошные крякозябры).

Скажем пару слов о спецификации. Описание всего, что поддерживает VBScript, займет много места. В принципе, не бойтесь экспериментировать, пишите код также, как и в VB, если что-то не пойдет, Вы об этом узнаете.

Все переменные здесь только Variant (может содержать данные любого типа.). Переменные задаются следующим образом:

Dim x – то, что хранит переменная VBScript сам разберется.

— Функции: Все функции Visual Basic.

Также как и в VB, константа вызывается, например так: vbNo.
Самая, на мой взгляд, приятная фича заключается в работе с FileSystemObject. Позволяет работать с файловой системой компьютера (удалять папки, писать в файлы и т.д.).

Теперь приведу пару примеров роботы с VBScript.

Напишем программу, которая будет суммировать два числа.

Для начала, создадим файл с именем sum.vbs в него запишем следующее:

Dim a,b,c ‘переменные для чисел
a = inputbox («Введите первое число»)
b = inputbox («Введите второе число»)
c = cint(a) + cint(b) ‘суммируем
msgbox («Результат: » & c) ‘вывод результата

Сохраняем, запускаем, получаем следующее (рисунок анимированный):

На первый взгляд все понятно, кроме одного: cint. Так как все переменные у нас Variant, а inputbox возвращает только строку как результат, то строка c = a + b будет интерпретирована как сложение двух строк, а не чисел, при вводе чисел 1 и 2 результат будет 12. Использование функции cint возвращает значение типа Integer, после этого складывает числа.
Рассмотрим программу для работы с файловой системой. Создаем файл FileSystem.vbs и запишем в него:
Dim fso, FolderName, FileName ‘переменные
‘создаем объект FileSystemObject в переменную fso
Set fso = CreateObject(«Scripting.FileSystemObject»)
FolderName = InputBox(«Имя папки?») ‘имя папки
FileName = InputBox(«Имя файла для создания?») ‘имя файла
fso.CreateFolder («c:\» & FolderName) ‘создадим папку
MsgBox «Создана папка: » & FolderName ‘сообщим пользователю
fso.CreateTextFile («c:\» & FolderName & «\» & FileName) ‘создадим файл
MsgBox «Создан файл: » & FileName ‘сообщим пользователю

Сохраняем, запускаем, получаем следующее (рисунок анимированный):

Теперь объясню более внятно. Во второй строке мы создали объект FileSystemObject в переменной fso. Потом вызвали метод CreateFolder для создания папки, указав в качестве аргумента путь к папке. Потом вызвали метод CreateTextFile для создания файла.
Теперь наполним текстовый файл информацией:
Dim fso, Text, FolderName, FileName ‘переменные
‘создаем объект FileSystemObject в переменную fso
Set fso = CreateObject(«Scripting.FileSystemObject»)
FolderName = InputBox(«Имя папки?») ‘имя папки
FileName = InputBox(«Имя файла для создания?») ‘имя файла
fso.CreateFolder («c:\» & FolderName) ‘создадим папку
MsgBox «Создана папка: » & FolderName ‘сообщим пользователю
Set Text = fso.CreateTextFile («c:\» & FolderName & «\» & FileName) ‘создадим файл
MsgBox «Создан файл: » & FileName ‘сообщим пользователю
Text.Write «Это»
Text.WriteLine » статья о VBScript»
Text.WriteBlankLines 2
Text.WriteLine «специально для ibm.at.ua»
Text.Close

Думаю, тут все понятно. Объяснять не будем.

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

Показать скрытое содержание

Const SILENT = False ‘тихий режим отключен, будет запрошено имя компьютера
‘Const SILENT = True ‘режим отчета о локальном компьютере без вывода диалогов

‘где сохранять отчет
Const DATA_DIR = «comp\» ‘локальный каталог + «\» в конце
‘Const DATA_DIR = «\\SRV\Invent\comp\» ‘сетевой ресурс + «\» в конце

‘прочее
Const TITLE = «Спецификация компьютера» ‘заголовок диалоговых окон
Const DATA_EXT = «.csv» ‘расширение файла отчета
Const HEAD_LINE = True ‘выводить заголовки в первой строке CSV-файла

‘не завершать скрипт аварийно
‘закомментировать на время отладки
On Error Resume Next

‘объект для доступа к файловой системе
Dim fso
Set fso = CreateObject(«Scripting.FileSystemObject»)

‘объект WMI
Dim wmio

‘файл отчета
Dim tf

‘узнать имя локального компьютера
Dim nwo, comp
Set nwo = CreateObject(«WScript.Network»)
comp = LCase(nwo.ComputerName)

‘запросить имя удаленного компьютера
If Not SILENT Then
comp = InputBox(«Введите имя компьютера:», TITLE, comp)
‘проверить доступность компьютера
If Unavailable(comp) Then
MsgBox «Компьютер недоступен:» & vbCrLf & comp, vbExclamation, TITLE
comp = «»
End If
End If

‘проводим инвентаризацию данных машины
If Len(comp) > 0 Then InventComp(comp)

‘если ошибка
If Len(Err.Description) > 0 Then _
If Not SILENT Then MsgBox comp & vbCrLf & «Ошибка:» & vbCrLf & Err.Description, vbExclamation, TITLE

‘инвентаризация данных компьютера, заданного сетевым именем или IP-адресом
‘сохранение отчета с указанным именем
Sub InventComp(compname)

Set wmio = GetObject(«WinMgmts:!\\» & compname & «\Root\CIMV2»)

‘некоторые WMI-классы поддерживаются не во всех версиях Windows
Dim build
build = BuildVersion()

‘файл отчета
Set tf = fso.CreateTextFile(DATA_DIR & compname & DATA_EXT, True)

‘первая строка — заголовки
If HEAD_LINE Then tf.WriteLine «Секция отчета;Параметр;Номер экземпляра;Значение»

‘дата проверки
tf.WriteLine «Компьютер;Дата проверки;1;» & Now

Log «Win32_ComputerSystemProduct», _
«UUID», «», _
«Компьютер», _
«UUID»

Log «Win32_ComputerSystem», _
«Name,Domain,PrimaryOwnerName,UserName,TotalPhysicalMemory», «», _
«Компьютер», _
«Сетевое имя,Домен,Владелец,Текущий пользователь,Объем памяти (Мб)»

Log «Win32_OperatingSystem», _
«Caption,Version,CSDVersion,Description,RegisteredUser,SerialNumber,Organization,InstallDate», «», _
«Операционная система», _
«Наименование,Версия,Обновление,Описание,Зарегистрированный пользователь,Серийный номер,Организация,Дата установки»

Log «Win32_BaseBoard», _
«Manufacturer,Product,Version,SerialNumber», «», _
«Материнская плата», _
«Производитель,Наименование,Версия,Серийный номер»

Log «Win32_BIOS», _
«Manufacturer,Name,SMBIOSBIOSVersion,SerialNumber», «», _
«BIOS», _
«Производитель,Наименование,Версия,Серийный номер»

‘не определяется Core 2 в XP SP2, см. http://support.microsoft.com/kb/953955
Log «Win32_Processor», _
«Name,Caption,CurrentClockSpeed,ExtClock,L2CacheSize,SocketDesignation,UniqueId», «», _
«Процессор», _
«Наименование,Описание,Частота (МГц),Частота FSB (МГц),Размер L2-кеша (кб),Разъем,UID»


Log «Win32_PhysicalMemory», _
«Capacity,Speed,DeviceLocator», «», _
«Модуль памяти», _
«Размер (Мб),Частота,Размещение»

‘пропускаются USB-диски
Log «Win32_DiskDrive», _
«Model,Size,InterfaceType», «InterfaceType <> ‘USB'», _
«Диск», _
«Наименование,Размер (Гб),Интерфейс»

‘только локальные диски
‘пропускаются USB-диски, размер которых обычно NULL
Log «Win32_LogicalDisk», _
«Name,FileSystem,Size,FreeSpace,VolumeSerialNumber», «DriveType = 3 AND Size IS NOT NULL», _
«Логический диск», _
«Наименование,Файловая система,Размер (Гб),Свободно (Гб),Серийный номер»

Log «Win32_CDROMDrive», _
«Name», «», _
«CD-привод», _
«Наименование»

‘только для XP/2003 и выше
‘пропускаются «двойники», имеющие в названии слово «Secondary»
If build >= 2600 Then
Log «Win32_VideoController», _
«Name,AdapterRAM,VideoProcessor,VideoModeDescription,DriverDate,DriverVersion», «NOT (Name LIKE ‘%Secondary’)», _
«Видеоконтроллер», _
«Наименование,Объем памяти (Мб),Видеопроцессор,Режим работы,Дата драйвера,Версия драйвера»
Else ‘для Windows 2000
Log «Win32_VideoController», _
«Name,AdapterRAM,VideoProcessor,VideoModeDescription,DriverDate,DriverVersion», «», _
«Видеоконтроллер», _
«Наименование,Объем памяти (Мб),Видеопроцессор,Режим работы,Дата драйвера,Версия драйвера»
End If

‘только для XP/2003 и выше
‘пропускаются отключенные сетевые адаптеры, в том числе минипорты
‘пропускаются виртуальные адаптеры VMware
If build >= 2600 Then
Log «Win32_NetworkAdapter», _
«Name,AdapterType,PermanentAddress,MACAddress», «NetConnectionStatus > 0 AND NOT (Name LIKE ‘VMware%’)», _
«Сетевой адаптер», _
«Наименование,Тип,IP-адрес,MAC-адрес»
Else ‘для Windows 2000
Log «Win32_NetworkAdapter», _
«Name,PermanentAddress,MACAddress», «», _
«Сетевой адаптер», _
«Наименование,IP-адрес,MAC-адрес»
End If

Log «Win32_SoundDevice», _
«Name», «», _
«Звуковое устройство», _
«Наименование»

Log «Win32_SCSIController», _
«Name», «», _
«SCSI контроллер», _
«Наименование»

‘только для XP/2003 и выше
‘пропускаются сетевые принтеры
‘условия «Local = True Or Network = False» недостаточно для принт-серверов, поэтому проверяется порт
If build >= 2600 Then
Log «Win32_Printer», _
«Name,PortName,ShareName», «(Local = True OR Network = False) AND (PortName LIKE ‘%USB%’ OR PortName LIKE ‘%LPT%’)», _
«Принтер», _
«Наименование,Порт,Сетевое имя»
End If

Log «Win32_PortConnector», _
«ExternalReferenceDesignator,InternalReferenceDesignator», «», _
«Разъем порта», _
«Внешний,Внутренний»

Log «Win32_Keyboard», _
«Name,Description», «», _
«Клавиатура», _
«Наименование,Описание»

Log «Win32_PointingDevice», _
«Name», «», _
«Мышь», _
«Наименование»

‘закрыть файл
tf.Close
If Not SILENT Then MsgBox «Отчет сохранен в файл:» & vbCrLf & DATA_DIR & compname & DATA_EXT, vbInformation, TITLE

‘составить WQL-запрос, выполнить и записать строку в CSV-файл
‘входные параметры:
‘from — класс WMI
‘sel — свойства WMI, через запятую
‘where — условие отбора или пустая строка
‘sect — соответствующая секция отчета
‘param — соответствующие параметры внутри секции отчета, через запятую
‘для отображения в кратных единицах, нужно их указать в скобках
Sub Log(from, sel, where, sect, param)

Const RETURN_IMMEDIATELY = 16
Const FORWARD_ONLY = 32

Dim query, cls, item, prop
query = «Select » & sel & » From » & from

If Len(where) > 0 Then query = query & » Where » & where
Set cls = wmio.ExecQuery(query,, RETURN_IMMEDIATELY + FORWARD_ONLY)

Dim props, names, num, value
props = Split(sel, «,»)
names = Split(param, «,»)

num = 1 ‘номер экземпляра
For Each item In cls
For i = 0 To UBound(props)

‘взять значение
Set prop = item.Properties_(props(i))
value = prop.Value

‘без проверки на Null возможнен вылет с ошибкой
If IsNull(value) Then
value = «»

‘если тип данных — массив, собрать в строку
ElseIf IsArray(value) Then
value = Join(value,»,»)

‘если указана кратная единица измерения, перевести значение
ElseIf Right(names(i), 4) = «(Мб)» Then
value = CStr(Round(value / 1024 ^ 2))
ElseIf Right(names(i), 4) = «(Гб)» Then
value = CStr(Round(value / 1024 ^ 3))

‘если тип данных — дата, преобразовать в читаемый вид
ElseIf prop.CIMType = 101 Then
value = ReadableDate(value)
End If

‘вывести в файл непустое значение, заменить спецсимвол «;»
value = Trim(Replace(value, «;», «_»))
If Len(value) > 0 Then tf.WriteLine sect & «;» & names(i) & «;» & num & «;» & value

‘перейти к следующему экземпляру
num = num + 1
Next ‘item

‘преобразование даты формата DMTF в читаемый вид (ДД.ММ.ГГГГ)
‘http://msdn.microsoft.com/en-us/library/aa389802.aspx
Function ReadableDate(str)
‘объект недоступен в Windows 2000, поэтому см. далее
‘ Dim dto
‘ Set dto = CreateObject(«WbemScripting.SWbemDateTime»)
‘ dto.Value = str
‘ ReadableDate = dto.GetVarDate(True)
ReadableDate = Mid(str, 7, 2) & «.» & Mid(str, 5, 2) & «.» & Left(str, 4)
End Function

‘узнать версию (билд) WMI-сервера
‘вернуть целое число
Function BuildVersion()
Dim cls, item
Set cls = wmio.ExecQuery(«Select BuildVersion From Win32_WMISetting»)
For Each item In cls
BuildVersion = CInt(Left(item.BuildVersion, 4))
Next
End Function

‘проверить доступность компьютера в сети
‘вернуть True, если адрес недоступен
Function Unavailable(addr)
Dim wmio, ping, p
Set wmio = GetObject(«WinMgmts:«)
Set ping = wmio.ExecQuery(«SELECT StatusCode FROM Win32_PingStatus WHERE Address = ‘» & addr & «‘»)
For Each p In ping
If IsNull(p.StatusCode) Then
Unavailable = True
Else
Unavailable = (p.StatusCode <> 0)
End If
Next
End Function

При запуске данного сценария, в ранее созданной папке comp появится отчет, который будет иметь имя .csv. Данные в нем хранятся в виде текста. Выдернуть их оттуда не очень удобно. Поэтому напишем еще один скрипт, для создания отчета.
Создадим файл с именем comp_report.vbs в который запишем следующее:

Показать скрытое содержание

‘== НАСТРОЙКИ

Const TITLE = «Спецификация компьютеров» ‘заголовок отчета и диалоговых окон
Const DATA_DIR = «comp\» ‘каталог для сохранения отчетов + «\» в конце
‘Const DATA_DIR = «\\SRV\Invent\comp\» ‘сетевой ресурс для сохранения отчетов + «\» в конце
Const DATA_EXT = «.csv» ‘расширение файлов с данными
Const HEAD_LINE = True ‘пропустить первую строку в файле CSV — заголовок
Const REPORT_FILE = «comp_report_%DATE%.htm» ‘имя файла для сохранения отчета

‘количество, порядок и названия столбцов отчета
‘значения должны соответствовать первым двум полям CSV файла!
Dim col(21) ‘ » & vbCrLf _
& «

Урок № 14. Процедуры и функции

Процедуры и функции

Выражения и операторы — это сырьё для блоков, из которых строится программы, где в роли блоков выступают процедуры и функции.

Процедуры и функции

В Visual Basic, как и во многих других языках программирования, большинство программ создается из блоков — процедур и функций. Весь программный код находится как бы внутри этих процедур. Если возникает необходимость в решении какой-либо задачи в любом месте программы, то вызывается процедура. В Visual Basic нельзя ввести код между процедурами. Код всегда должен находиться внутри процедуры.

Давайте разберёмся с понятиями, и определим, что будет называться процедурой, а что функцией.

Процедура — это некий блок кода, который будет выполняться всякий раз при вызове этой процедуры. Каждая процедура начинается зарезервированным словом Sub и заканчивается End. Вот общий синтаксис процедуры:

[ Private | Public | Friend ] [ Static ] Sub name [(arglist)]
&nbsp&nbsp&nbsp&nbsp[здесь некий код]
&nbsp&nbsp&nbsp&nbsp[ Exit Sub ]
&nbsp&nbsp&nbsp&nbsp[здесь тоже может быть некий код]
End Sub

Всё, что заключено в квадратные скобки — является необязательным. Оператор Exit Sub позволяет досрочно выйти из процедуры. Иногда это очень удобно. Слова Public, Private имеют то же значение, что и при объявлении переменных.

arglist имеет следующий вид:

[ Optional ] [ ByVal | ByRef ] [ ParamArray ] varname[( )]
[ As type] [= defaultvalue]

Рассмотрим пример процедуры, которая будет выводить на экран сообщение «Hello World!»:

Private Sub ShowMessage()
&nbsp&nbsp&nbsp&nbspMsgBox «Hello World!»
End Sub

Что можно сказать об этой процедуре? Процедура имеет тип Private, т.е. доступна будет только из кода именно той формы (модуля), где она объявлена (вспомните типы объявления переменных). Данная процедура не содержит параметров, о чём нам говорят пустые круглые скобки.. Назначение — вывести сообщение Hello World на экран.

MsgBox — это встроенная функция Visual Basic, которая выводит на экран окно с сообщением, заданным в качестве параметра. Остальные параметры необязательны (их всего 5). Подробнее о функции MsgBox можно прочитать здесь.

Как вызвать процедуру? Для этого достаточно написать имя процедуры:

Call ShowMessage ‘ более наглядные вариант

Оба этих варианта абсолютно эквивалентны. Но для вызова процедур всё-таки лучше использовать второй вариант.

Теперь давайте изменим эту процедуру и добавим к ней параметр, значение которого будет выводиться функцией MsgBox (вместо Hello World):

Private Sub ShowMessage(message As String )
&nbsp&nbsp&nbsp&nbspMsgBox message
End Sub

Теперь при вызове процедуры необходимо указать параметр:

Call ShowMessage («Наша первая процедура»)

Результатом выполнения такой процедуры будет вывод на экран сообщения: «Наша первая процедура». Скобки, окружаемые параметр обязательны, если перед именем процедуры стоит оператор Call. Если Call отсутствует, то скобки ставить не нужно.

Давайте рассмотрим подробнее что же происходит при вызове нашей процедуры. Встретив строку с вызовом нашей процедуры Visual Basic проверяет, нужны ли данной процедуре параметры. Убедившись в том, что нужны (параметр message) он передает в процедуру строку «Наша первая процедура». Т.е. фактически в процедуре происходит присвоение переменной message значения «Наша первая процедура». Ну а далее происходит вызов функции MsgBox и вывод сообщения на экран. Если количество параметров, передаваемых при вызове процедуры не совпадёт с количеством параметров в объявлении процедуры — Visual Basic сгенерирует ошибку.

Итак, с процедурами разобрались. Настало время разобраться с функциями.

Функция — это некий блок кода, который будет возвращать значение. Этим, и только этим функции отличаются от процедур. Общий синтаксис функции:

[ Public | Private | Friend ] [ Static ] Function имяфункции _
[(arglist)] [ As type]
&nbsp&nbsp&nbsp&nbsp[здесь некий код]
&nbsp&nbsp&nbsp&nbsp[имяфункции = выражение]
&nbsp&nbsp&nbsp&nbsp[ Exit Function ]
&nbsp&nbsp&nbsp&nbsp[здесь тоже может быть некий код]
&nbsp&nbsp&nbsp&nbsp[имяфункции = выражение]
End Function

Что значит «будет возвращать значение»? Рассмотрим функцию из урока 8:

Public Function MyFunc() As Byte
&nbsp&nbsp&nbsp&nbspMyFunc = 234
End Function

Когда мы говорили о выражениях, мы говорили, что MyFunc — это выражение, со значением 234. Т.е. здесь, функция MyFunc возвращает значение 234 (байт). Чтобы задать это значение, необходимо присвоить имени функции выражение. В нашем случае в качестве выражения выступает число 234.

Давайте рассмотрим более практичный пример. Напишем функцию для вычисления квадрата числа. У функции будет 1 параметр типа Integer — число для возведения в квадрат. Функция будет возвращать значение квадрата параметра. Тип возвращаемого значения — Long:

Public Function Square(number As Long ) As Long
&nbsp&nbsp&nbsp&nbspSquare = number * number
End Function

Вызвать функцию можно так:

А можно так, используя нашу процедуру для вывода сообщения на экран:

ShowMessage Square (5)

В последнем случае возвращённое функций значение уходит в никуда, но сама функция благополучно выполнится. Обратите внимание на отсутствие скобок в последнем вызове. Скобки здесь не обязательны, в отличие от двух предыдущих вызовов. Там скобки обязательны. (ну это и понятно, как бы Visual Basic без скобок догадался, где параметры для ShowMessage, а где для Square).

На следующем уроке мы познакомимся с элементами управления и напишем небольшую программу.

Простая страница с VBScript

Простая веб-страница

Вы можете создать простую веб-страницу, код которой показан ниже, и проверить её работу в Internet Explorer (другие браузеры не поддерживают VBScript). Если вы щёлкните по кнопке на странице, вы увидите VBScript в действии.

Результат выполнения этого сценария не приводит в восторг. Здесь просто выводится на экран диалоговое окно с текстом. В оригинальной документации в этом примере выводится фраза на латинском языке «Mirabile visu», которую я перевёл как смог (возможно, не совсем правильно))). Однако это даёт представление о том, как встраивать сценарии в веб-страницу.

Когда Internet Explorer читает страницу, он находит тег

Илон Маск рекомендует:  AnsiString - Тип Delphi
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL