VBS команди. VBScript. Основи VBScript. Методи та властивості класу Shell

💖 Подобається?Поділися з друзями посиланням

Типи даних

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

Підтип Опис
Empty Змінної не надано значення. При використанні неініціалізованої змінної в числових виразах буде підставлятися 0, а в рядкових - порожній рядок.
Null Змінна інформація не містить даних.
Boolean Булевська змінна може набувати значення True, або False.
Byte Ціле число в діапазоні від 0 до 255.
Integer Ціле число в діапазоні від -32768 до 32767.
Currency Число з фіксованою точкою в діапазоні від -922337203685 477.5808 до 922337203685 477.5807.
Long Ціле число в діапазоні від -2147483648 до 2147483647.
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 Номер помилки.

Залежно від виразу, у якому бере участь змінна, її вміст буде автоматично приведено до потрібного типу. Розглянемо такий приклад:

Option Explicit Sub TestVBScript Dim A, B A = 5 B = "12" Application.MessageBox A + B, "", vbOkOnly End Sub

Оскільки у вираженні бере участь числова змінна A, інтерпретатор перетворює значення змінної Bз рядка "12" до числа і підсумує їх:

Змінимо макрос так, щоб змінна Атеж містила рядок:

Option Explicit Sub TestVBScript Dim A, B A = "5" B = "12" Application.MessageBox A + B, "", vbOkOnly End Sub

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

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

Якщо результатом виразу має бути саме злиття рядків, а не сума їх числових уявлень, слід використовувати оператор & замість +.

Змінні

Змінна – це зручне символьне позначення області пам'яті, де програма зберігає деякі дані. У процесі виконання програми значення змінної може змінюватися. Перед використанням змінну слід оголосити за допомогою оператора Dim.

За допомогою одного оператора можна оголосити відразу кілька змінних, якщо перерахувати їх імена через кому:

Dim Left, Right, Top, Bottom

При оголошенні немає необхідності вказувати тип даних, оскільки всі змінні мають тип Variant.

Якщо в першому рядку тексту скрипта не вказано Option Explicit, використовувати змінні можна без оголошення. Але, такий шлях може призвести до помилок, які важко виявити. Достатньо один раз помилитися в написанні імені змінної в тексті програми, щоб отримати непередбачуваний результат. Ми рекомендуємо завжди вказувати Option Explicit та оголошувати змінні.

Ім'я змінної має відповідати таким вимогам:

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

Область видимості та час життя

Область видимості змінної визначається тим, де вона була оголошена. Якщо всередині тіла процедури то така змінна називається локальною і доступна тільки в межах цієї процедури. Якщо змінна оголошена в тексті скрипта, вона буде видима для всіх процедур або функцій, визначених у цьому скрипті. Локальні змінні можуть мати однакові імена, якщо оголошено у різних процедурах.

У дереві Провідника вікна Редактора скрипт-об'єктів є спеціальний розділ – Константи та змінні – для оголошення глобальних змінних, видимих ​​для всіх скрипт-функцій проекту.

Інтерпретатор виділяє пам'ять для локальних змінних на момент їх оголошення і вивільняє після виходу з процедури. Глобальні змінні існують з моменту їх оголошення і поки що скрипт не закінчить своє виконання. Щодо Гедимина це означає, що глобальні змінні існують протягом усього часу виконання програми.

Привласнення значення змінної

Значення оголошеної змінної надається за допомогою оператора =. Ім'я змінної вказується зліва від оператора, нове значення – праворуч. Наприклад:

A = 200 B = "Найменування"

Скалярні змінні та масиви

Змінна що містить єдине значення називається скалярною. Іноді виникає необхідність зберігати кілька значень в одній змінній. І тут слід оголосити масив. Синтаксис оголошення ідентичний оголошення скалярної змінної за винятком, що після імені у круглих дужках ми задаємо розмірність масиву. Наступне оголошення створить масив із 12 елементів:

Dim Monthes(11)

У мові VBScript ліва межа індексу масиву завжди 0. Таким чином, розмір масиву обчислюється, як число вказане в дужках плюс один. При присвоюванні значення елементу масиву слід зазначити його індекс у круглих дужках:

Monthes(0) = "Січень" Monthes(1) = "Лютий" Monthes(2) = "Березень" ... Monthes(10) = "Листопад" Monthes(11) = "Грудень"

Аналогічно, при зверненні до значення елемента ми використовуємо його індекс:

MonthName = Monthes(5)

Масив не обов'язково має бути одномірним. VBScript дозволяє нам встановити до 60 розмірностей при оголошенні масиву. Наприклад, наступний оператор створить двовимірний масив з 12 рядків і двох колонок:

Dim MonthDays(11, 1)

При зверненні до елементів багатовимірного масиву слід зазначати всі індекси:

MonthDays(0, 0) = "Січень" MonthDays(0, 1) = 31 MonthDays(1, 0) = "Лютий" MonthDays(1, 1) = 28 ...

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

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

ReDim A(25)

У процесі виконання можна викликати оператор ReDim багаторазово, щоразу змінюючи розмір масиву. Опція Preserve зберігає значення елементів масиву під час зміни розміру. Наприклад, наступний код збільшить оголошений вище масив на п'ять елементів, залишивши незайманими:

ReDim Preserve A(30)

Пам'ятайте, що при зменшенні розміру масиву значення віддалених елементів будуть безповоротно втрачені. За допомогою оператора Erase можна очистити елементи фіксованого масиву або звільнити пам'ять динамічної масиву.

Dim A ReDim A(25) ... Erase A

Константи

Правилом гарного тону є оголошення констант для значень, що багаторазово використовуються в тексті програми. Грамотно надане ім'я константи покращує читабельність, а саме використання - спрощує процес внесення змін до коду. На відміну від змінних значення константи не можна змінити в процесі виконання програми. Створення константи відбувається за допомогою оператора Const:

Const CountryName = "Belarus" Const CountryCode = 375

Декілька констант можуть бути оголошені в рамках одного оператора, через кому. Як і змінна, константа має свою область видимості в залежності від того, де (у процедурі або за її межами) і як (Public або Private) вона була оголошена. Константи, створені оператором Const без вказівки Public або Private, є загальнодоступними за замовчуванням.

У дереві Провідника вікна Редактора скрипт-об'єктів є спеціальний розділ – Константи та змінні – для оголошення глобальних констант, видимих ​​для всіх скрипт-функцій проекту.

Значення рядкових констант полягають у подвійні лапки.

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

Const Public IndependenceDay = #03/25/1918#

Щоб уникнути плутанини між константами та змінними, рекомендується використовувати єдиний префікс для всіх констант, наприклад "con", або набирати ім'я константи у верхньому регістрі.

Для полегшення праці програміста VBScript містить набір зумовлених констант.

Оператори

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

Арифметичні оператори

Оператор Приклад використання Опис
^ number ^ exponent Зводить номер у ступінь 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, як для оператора множення.

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

Формат використання операторів порівняння:

Result = expression1 comparisonoperator expression2

де використовуються наступні оператори порівняння:< (меньше), <= (меньше или равно), >(більше), >= (більше або одно), = (рівно),<>(не дорівнює).

Залежно від типів та значень операндів, порівняння здійснюється наступним чином:

Якщо То
Обидва операнда числа. Виконується порівняння двох чисел.
Обидва операнда рядки. Виконується порівняння двох рядків.
Один з операндів число, а другий рядок. Рядковий операнд наводиться до числа і виконується порівняння двох чисел.
Один з операндів Empty, а друге число. Операнд зі значенням Empty приймається рівним 0.
Один з операндів Empty, а другий рядок. Операнд зі значенням Empty приймається рівним порожньому рядку "". Здійснюється порівняння двох рядків.
Обидва операнди Empty. Операнди вважаються рівними.
Хоча б один із операндів Null. Результат набуває значення Null.

Спеціальний оператор Is застосовується для порівняння двох об'єктних змінних і повертає Істину, якщо обидві змінні посилаються на один і той самий екземпляр об'єкта.

Оператори конкатенції

Result = expression1 & expression2

Якщо операнд не є рядком, він наводиться до рядкового типу. Якщо обидва операнда Null, то результат також приймає значення Null, проте, на відміну інших операторів, якщо тільки один операнд Null, він приймається рівним порожній рядку. Операнд, має значення Empty, також сприймається як порожній рядок " " .

Логічні оператори

VBScript надає нам наступні логічні оператори:

  1. Логічне виняток (Xor);
  2. Логічний еквівалент (Eqv);
  3. Логічна імплікація (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
0 0 0 0 0 1 1
0 1 0 1 1 0 1
1 0 0 1 1 0 0
1 1 1 1 0 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 дозволяє виконати ту чи іншу групу команд залежно від результату логічного виразу чи значення булевської змінної.

Для виконання єдиної команди при виконанні заданої умови використовується однорядковий синтаксис виразу:

Dim S If DatePart("w", Now) = vbMonday Then S = "Понеділок" Application.MessageBox S, "", vbOkOnly

Зверніть увагу, що секція Else у цьому випадку опущена. Для виконання групи операторів слід укласти їх між ключовими словами Then та End If.

Dim S If DatePart("w", Now) = vbMonday Then S = "Сьогодні понеділок" Application.MessageBox S, "", vbOkOnly End If

Якщо під час виконання умови потрібно виконати один код, а при невиконанні – інший, то використовується синтаксис виразу з секцією Else:

Dim S If DatePart("w", Now) = vbMonday Then S = "Сьогодні понеділок" Else S = "Сьогодні не понеділок" End If Application.MessageBox S, "", vbOkOnly

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

Dim S, D D = DatePart ("w", Now) If D = vbMonday Then S = "Понеділок" ElseIf D = vbTuesday Then S = "Вівторок" ElseIf D = vbWednesday Then S = "Середовище" ... End If Application. MessageBox S, "", vbOkOnly

Вирази If можуть бути вкладеними:

Dim S, D D = DatePart("w", Now) If D = vbMonday Then S = "Понеділок" Else If D = vbTuesday Then S = "Вівторок" Else If D = vbWednesday Then S = "Середовище" Else ... End If End If End If

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

Вираз Select..Case

Перепишемо приклад із днями тижня з використанням виразу вибору:

Dim S Select Case DatePart("w", Now) Case vbMonday S = "Понеділок" Case vbTuesday S = "Вівторок" Case vbWednesday S = "Середовище" ... Case Else Err.Raise 32000, "", "Невідомий день тижня End Select

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

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

Часто виникає ситуація, коли код потрібно запустити повторно. Для цього слід написати оператор циклу, який повторює певні команди знову та знову. Оператори циклу використовуються в багатьох ситуаціях: при обчисленні підсумкової суми за списком чисел, переміщенні за записами набору даних або запуску блоку коду для декількох об'єктів. Існує кілька циклів, описаних у наступних розділах. Деякі з них виконуються, поки умова має значення Істина, деякі – поки Брехня. І, нарешті, є такі, що виконуються задане число разів.

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

Цей оператор призначений для виконання групи команд поки що задана умова Істинно або до тих пір, коли вона не стане Істинною. Перевірка умови може здійснюватися як на початку циклу:

Do [(While | Until) condition] Loop

так і наприкінці:

Do Loop [(While | Until) condition]

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

Наступний код дозволяє замінити гральний кубик:

Dim Resp, Num Do Num = Int(6 * Rnd + 1) Resp = Application.MessageBox(Num & "Іще число?", "",_ vbYesNo or vbQuestion)

While..Wend

Являє собою зрізану версію оператора Do..Loop і дозволяє виконувати групу команд поки що умова Істинно. Синтаксис оператора:

While condition Wend

Зверніть увагу, що Exit Do не діє всередині цього циклу. Цикли While..Wend можуть бути вкладеними.

For..Next

Цей цикл повторює заданий набір команд вказану кількість разів. Синтаксис оператора має вигляд:

For counter = start Перейти до наступного

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

Зміна лічильника в тілі циклу не заборонено, але настійно не рекомендується, оскільки ускладнює розуміння логіки програми та її налагодження.

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

Dim A (9, 9, 9) Dim I, J, K For I = 0 To 9 For J = 0 To 9 For K = 0 To 9 A (I, J, K) = 1 Next Next Next

For Each..Next

Оператор циклу For Each..Next повторює заданий набір команд кожного елемента масиву чи колекції і має наступний синтаксис:

For Each element In group Next

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

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

Dim fso, f, f1, fc, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder("c:\") Set fc = f. .name & vbNewLine Next Application.MessageBox s, "Файли на c:\", vbOkOnly

Процедури

Для економії пам'яті та структурування програми фрагмент коду, що викликається багаторазово в різних місцях, може бути оформлений у вигляді процедури. У мові VBScript існують два види процедур: підпрограми (Sub) та функції (Function). Підпрограма – це послідовність операторів, обрамлена ключовими словами Sub та End Sub. Підпрограма може приймати параметри на вхід, але не повертає значення. Функція – послідовність операторів, укладена між Function та End Function, - повертає результат і тому може бути використана у виразі. Кожна процедура повинна мати ім'я унікальне в межах модуля. Імена процедур, оголошених у глобальному модулі, мають бути унікальними в рамках усього проекту.

Визначення підпрограми та функції має наступний синтаксис:

| Private] Sub name [(arglist)] End Sub | Private] Function name [(arglist)] End Function

Public процедури є глобальними та доступні у всіх скриптах програми. Private процедури доступні лише в тому скрипті, де вони були оголошені. Якщо не зазначено інше, оголошена процедура є загальнодоступною. Ключове слово Default може бути використане тільки в тілі класу і служить для вказівки методу за промовчанням цього класу.

Список параметрів має наступний синтаксис:

Varname [, ...]

Параметри можуть передаватися за значенням (ByVal) або за посиланням (ByRef). За промовчанням всі параметри передаються за значенням. Константи, результати обчислення виразів можуть бути лише за значенням. Зміна параметра, надісланого за посиланням, призведе до зміни значення зовнішньої змінної. Пояснимо передачу параметрів усередину процедури на наступному прикладі:

Sub DoCalculation(ByRef A, ByVal B, ByVal C) A = C * 2 B = C / 2 End Sub Sub TestVar Dim V1, V2 V1 = 1 V2 = 2 DoCalculation V1, V2, 10 " Після виконання процедури DoCalculation " V1 = 20" V2 = 2 End Sub

Змінні, оголошені всередині тіла процедури є локальними і знищуються після завершення її виконання. Значення локальних змінних не зберігаються.

Список параметрів вказується в круглих дужках під час виклику функції або підпрограми за допомогою оператора Call . Так, виклик процедури DoCalculation у наведеному вище прикладі ми могли написати так:

Call DoCalculation(V1, V2, 10)

Вираз Execute

Класи VBScript

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

Визначення класу здійснюється за допомогою наступної конструкції:

Class name statements End Class

де name - це ім'я класу, а statements - це одне або кілька визначень змінних, властивостей, процедур або функцій, які називаються членами класу. Зверніть увагу, що на відміну від Delphi, де код визначення класу містить лише оголошення процедур і функцій, у класі VB код членів прописується прямо в тексті класу.

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

Змінні, оголошені як загальнодоступні, стають властивостями класу нарівні з властивостями, оголошеними безпосередньо за допомогою конструкцій Property Get, Property Let, Property Set.

Визначення властивостей класу

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

Синтаксис визначення таких функцій наступний:

| Private] Property Get name [(arglist)] [ name = expression] [ name = expression] End Property Property Let name ( value) End Property Property Set name ( reference ) End Property

Визначивши лише одну функцію, зчитування чи присвоєння, можна створити властивість відповідно лише для читання або запису. Процедура Property Let використовується для присвоєння простих типів даних, а Property Set для передачі на об'єкт. Зауважте, що всі три функції можуть приймати на вхід довільний список параметрів. Таким чином можна організувати, наприклад, властивості-масиви, передаючи як аргумент індекс елемента.

Створення та знищення екземпляра VB класу

Створення екземпляра VB класу здійснюється за допомогою оператора New.

Dim X Set X = New classname

Знищення раніше створеного екземпляра відбувається автоматично після завершення блоку коду, де була оголошена відповідна змінна та за умови, що на неї немає зовнішніх посилань. Якщо необхідно знищити екземпляр вручну, необхідно присвоїти значення Nothing змінної.

' оголошення змінної та створення екземпляра класу Dim X Set X = New classname ... ' використання екземпляра класу... ' знищення екземпляра класу Set X = Notning ...

Події Initialize та Terminate

Подія Initialize відбувається при створенні екземпляра класу, а Terminate – при його знищенні. Розробник може визначити свої обробники даних подій. Нижче наведено приклад використання подій створення та видалення об'єкта:

Class TestClass " Визначення обробника події Initialize. Private Sub Class_Initialize MsgBox("TestClass started") End Sub " Визначення обробника події Terminate. Private Sub Class_Terminate MsgBox("TestClass terminated") End Sub End Class " Створення екземпляра класу TestClass. " На екран буде виведено повідомлення "TestClass started" Set X = New TestClass " Знищення екземпляра. " На екран буде виведено повідомлення "TestClass terminated" Set X = Nothing

Продовження

Visual Basic Script

Навіщо потрібні VBS-скрипти

VBS-скрипт – це потужне рішення для автоматизації дій користувача у системах сімейства Windows. Такий тип сценаріїв зазвичай використовується для:

  • створення складних сценаріїв;
  • використання об'єктів з інших додатків та бібліотек;
  • приховання вікон під час виконання сценарію;
  • шифрування логіки сценарію.

В основному VBS-сценарії застосовуються для обробки даних, управління системою, роботи з обліковими записами користувачів та комп'ютерів, взаємодії з офісними програмами, роботи з базами даних та інших складних завдань.

Основні положення

Залежно від мови сценарію, змісту та шифрування зустрічаються такі типи скриптів:

  • vbs - Visual Basic Script
  • vbe - зашифрований Visual Basic Script
  • js - Java Script
  • jse - зашифрований Java Script
  • wsh - налаштування скрипту
  • wsf – XML-інтегрований сценарій

У цій статті я розглядатиму сценарії типу VBS.

Сценарії зазвичай редагуються в блокноті Windows, але я рекомендую використовувати Notepad2 , який підсвічує ключові слова Visual Basic і допомагає форматувати тіло сценарію. Отже, vbs-сценарій - це звичайний текстовий файл з ім'ям *.VBS, який легко правити в блокноті, а запускати на виконання - подвійним клацанням миші або викликом на ім'я в консолі.

Як було описано вище, сценарії не компілюються, а інтерпретуються. Тобто для обробки скрипта в системі повинен бути інтерпретатор мови VBS, і таких інтерпретатора в Windows є навіть дві штуки: віконний WScript і консольний CScript - обидва інтерпретатора - це Windows Script Host (WSH).

За замовчуванням всі скрипти виконуються через WScript, тобто жодних налаштувань не потрібно, але щоб виконати скрипт у вікні консолі, необхідно запустити його через CScript, або встановити CScript як інтерпретатор, який використовується за замовчуванням. Для цього в командному рядку потрібно виконати таке:

CScript // H: CScript

Після цього всі сценарії будуть виконуватися в режимі консолі. Повернення у віконний режим здійснюється наступною командою:

CScript // H: WScript

У Visual Basic працюють такі правила:

  • довжина рядка не обмежена;
  • регістр символів не враховується;
  • кількість прогалин між параметрами не враховується;
  • рядок команди можна розривати, але в місці розриву потрібно вставляти символ " _ ";
  • максимальна довжина імені змінної 255 символів;
  • коментарі позначаються сиволом " " ".

=== Script Information Header === " Script Name: " назва сценарію; " Date: " дата зміни; " Author: " автор; " Description: " опис; " === Initialization Block === Option Explicit " директива , що забороняє автоматичне створення "змінних; Dim оголошення змінних; Dim () " оголошення масивів; Set " підключення об'єктів; " === Script Main Logic === " тіло сценарію; " === Functions and Procedures === " процедури та функції;

Змінні

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

Dim · Змінна, доступна всім підпрограмам; " змінна, доступна всім підпрограмам; Private " змінна, доступна тільки для поточної програми та її підпрограм;

Константи оголошуються на початку сценарію за допомогою конструкції:

Const = константа, доступна всім підпрограмам; Public Const = константа, доступна всім підпрограмам; Private Const = "константа, доступна тільки поточній програмі" та її підпрограм.

Тип змінної надається автоматично після внесення до неї першого значення. У Visual Basic існують такі типи даних:

  • empty - неініціалізована змінна;
  • null – порожня змінна;
  • boolean – логічний тип, можливі значення: False, True або 0, 1;
  • byte - 8-бітове ціле число без знака, можливі значення: 0..255;
  • integer - 32-бітове ціле число, можливі значення: -32768.. 32767;
  • long - 64-бітове ціле число, можливі значення: -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 .8 3.2;
  • date - дата, можливі значення: 01.01.1900 та 31.01.9999;
  • string – рядкова змінна, місткість до 2 мільярдів символів;
  • object – покажчик на об'єкт;
  • error – код помилки.

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

VarType( ) повернення номера типу змінної; TypeName( ) " повернення імені типу змінної; IsArray( ) " перевірка, що змінна - це масив; IsDate( ) " перевірка, що змінна - це дата; IsEmpty( ) " перевірка, що змінна неініціалізована; IsNull( ) " перевірка, що змінна порожня; IsNumeric( ) " перевірка, що змінна - це число; IsObject( ) " перевірка, що змінна - це об'єкт; CCur( ) " конвертація в тип currency; CBool( ) " конвертація змінної в тип boolean; CByte( ) " конвертація змінної у тип byte; CDate( ) " конвертація змінної в тип date; CDbl( ) " конвертація змінної в тип double; CInt( ) " конвертація змінної в тип integer; CLng( ) " конвертація змінної у тип long; CSng( ) " конвертація змінної у тип single; CStr( ) " конвертація змінної у тип string.

Як було сказано вище, Visual Basic не накладає строгих обмежень на імена змінних, але в той же час існують рекомендації для назв змінних, щоб у тексті сценарію легко визначати тип даних. Для цього перед ім'ям змінної рекомендується ставити умовні символи, які визначають тип змінної:

  • iValueName - числові типи
  • sValueName - рядковий тип
  • bValueName - логічний тип
  • dValueName - дата
  • oValueName - об'єкт
  • cValueName - константа
  • aArrayName - масив

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

Dim

Приклад використання масивів

Dim aMyArray1(10,10) "Створення статичного масиву розмірністю 11х11; Dim aMyArray2()" Створення динамічного масиву; aMyArray1(0,0) = "Hello" " заповнення масиву; aMyArray1(0,1) = "People" " заповнення масиву; aMyArray1(1,0) = "World" " заповнення масиву.

Перед тим, як користуватися динамічним масивом, йому потрібно вказати поточну розмірність за допомогою команди ReDim, після чого масив можна переформувати в будь-якому місці сценарію, при цьому або очистити весь масив, або зберегти старі значення осередків командою Preserve:

ReDim aMyArray2(0) " формування масиву з одного елемента; aMyArray2(0) = "Hello" " заповнення масиву; ReDim aMyArray2(1) видалення старого масиву і формування нового з інших елементів; aMyArray2(0) = "Hello" " заповнення масиву; aMyArray2(1) = "World" " заповнення масиву; ReDim Preserve aMyArray2(2) формування масиву з трьох елементів, залишаючи старі значення елементів у тих осередках, де вони були; aMyArray2(1) = "!" " заповнення масиву; Erase aMyArray2 " видалення масиву.

Щоб дізнатися розмірність масиву, зазвичай користуються функцією UBound, яка буде розглянута нижче разом з іншими функціями роботи з даними.

Розгалуження за умовою

Жоден повноцінний сценарій не обходиться без розгалужень, розгалуження допомагають вибрати правильний шлях під час виконання чи невиконання якоїсь закладеної умови. Іншими словами, розгалуження реалізують логіку сценарію. У VBS-сценаріях реалізовано кілька механізмів розгалужень. Розглянемо їх у порядку.

Конструкція для однієї дії, яка виконується за умовою:

If Then

Конструкція для кількох дій, які виконуються за умовою:

If Then End if

Конструкція "розвилка":

If Then Else End if

Конструкція "розвилка на кілька шляхів" (варіант з If):

If Then ElseIf Then Else End if

У всіх наведених вище конструкціях застосовується таке правило: "Якщо виконується умова , то зробити список дій які розташовані під поточним блоком умови. Якщо поточна умова не виконується, перейдіть до списку дій під командоюElse."

Конструкція "розвилка на кілька шляхів" (варіант сSelect):

Select Case Case Case Case Else End Select

У цій конструкції працює правило: "Якщо значення змінної дорівнює значенню , то зроби список дій під цим значенням, інакше перейти до перевірки наступного значення ."

Цикли

Для організації повторюваних процесів або перебору елементів масиву зазвичай використовуються цикли. У VBS-сценаріях організовано кілька видів циклів: звичайний цикл, цикл із невідомою кількістю ітерацій, цикл за умовою.

Звичайний цикл організується структурою For - Next, в аргументах якої задаються такі параметри як ім'я лічильника ( ), початкове значення лічильника ( ), кінцеве значення лічильника ( ) і, при необхідності, крок лічильника (Step ).

For = To Next

Якщо в процесі роботи циклу потрібно припинити перебір значень, це можна зробити за допомогою командиExit For

For = To If Then Exit For Next

Цикл з невідомою кількістю ітерацій зазвичай застосовується для перебору всіх значень колекції об'єкта, коли відома його розмірність. Ця структура перебере всі значення ( ) масиву, переданого як параметр циклу ( ).

For Each In Next

For Each oCurrentFile In oFiles WScript.Echo oCurrentFile.Name Next

Цикли з умовами застосовуються для обробки даних при виконанні якоїсь умови. Такі цикли бувають двох видів: з перевіркою на початку циклу та з перевіркою наприкінці.

Цикл, поки виконується умова, з перевіркою на початку

Do While Loop

Цикл, доки не виконається умова, з перевіркою на початку

Do Until Loop

Як було зазначено вище, умови можна ставити на кінець циклу. У цьому випадку тіло циклу буде виконане щонайменше один раз. Так само як і у звичайних циклах, цикл з умовою можна перервати командою Exit Do:

Do If Then Exit Do Loop Until

Вбудовані функції

Щоб працювати з даними та будувати свої процедури та функції, розробники Visual Basic вже подбали про основу сценаріїв - базові функції. VBS-скрипти функції для роботи з датами, рядками та числами, а також базові процедури введення-виводу та процедури роботи з мережею. Давайте коротко розглянемо вбудовані функції.

Функції обробки дат:

Date " повернення поточної дати; Time " повернення поточного часу; Now " повернення поточних дати та часу; DateDiff( , , ) " повернення різниці між датами; MonthName( ) " повернення назви місяця; WeekDayName( , , ) " повернення назви дня тижня; Day( ) " повернення дня із зазначеної дати; Month( ) " повернення місяця із зазначеної дати; Year( ) " повернення року із зазначеної дати; Hour( ) " повернення години із зазначеної дати; Minute( ) " повернення хвилини із зазначеної дати; Second( ) " повернення секунди із зазначеної дати.

Функції обробки рядків:

Asc( ) " повернення ANSI-коду символу; Chr( ) " повернення символу за ANSI-кодом; InStr( , ) "повернення позиції підрядка у зазначеному" рядку; InStrRev( , ) "повернення позиції підрядки у зазначеному" рядку, починаючи з кінця рядка; Join ( , ) " перетворення масиву в рядок; Len( ) " повернення довжини рядка; LCase( ) "перетворення рядка в рядок з малих" символів; UCase( ) "перетворення рядка в рядок з великих" символів; Left( , ) " повернення зазначеної кількості символів з " початку рядка; Right( , ) " повернення зазначеної кількості символів з " кінця рядка; Mid( , , ) " повернення зазначеної кількості символів з " зазначеного номера символу рядка; Replace( , , [, Params]) " заміна підрядки у вказаному рядку; Space( ) " рядки із зазначеної кількості прогалин; Split( , [, Params]) " перетворення рядка в масив; String( , ) "рядок із зазначеної кількості" певних символів; SrtReverse( ) " дзеркальне відображення рядка; Trim( ) " обрізка прогалин ліворуч і праворуч від рядка; LTrim( ) " обрізка пробілів зліва від рядка; RTrim( ) " обрізання прогалин праворуч від рядка.

Математичні функції:

Randomize" ініціалізація механізму випадкових чисел (нічого не повертає); Rnd" повернення випадкового нецілочисельного значення від 0 до 1; Atn ( ) " обчислення арктангенса числа; Cos ( ) " обчислення косинуса числа; Sin( ) " обчислення синуса числа; Exp ( ) " обчислення натурального логарифму числа; Log ( ) " обчислення десяткового логарифму числа; Sqr ( ) " обчислення квадратного кореня числа; Abs ( ) " обчислення абсолютного значення числа; Hex ( ) " обчислення шістнадцяткового значення числа; Int( ) "округлення числа; Fix( ) " обчислення цілої частини числа.

І, звичайно, крім згаданих функцій, сценарії підтримують всі найпростіші математичні та логічні операції:

  • = - Оператор присвоєння;
  • + - сума двох чисел;
  • - - віднімання двох чисел;
  • * - множення двох чисел;
  • / - Поділ двох чисел;
  • \ - цілочисельне розподіл двох чисел;
  • Mod – залишок від розподілу двох чисел;
  • ^ - Зведення в ступінь;
  • & - з'єднання двох рядків;
  • Is – порівняння двох об'єктів;
  • Eqv – порівняння двох виразів;
  • Not – логічна операція заперечення;
  • And – логічна операція кон'юнкції;
  • Or – логічна операція диз'юнкції;
  • Xor – логічна операція виключення;
  • Imp – логічна операція імплікації.

Черговість виконання операцій визначається як і у всіх мовах програмування: спочатку виконуються операції в дужках, потім обчислюються функції, потім операції множення та поділу, слідом йдуть додавання та віднімання, і завершують обчислення логічні операції.

Функції користувача

Сценарії, написані на Visual Basic, дозволяють визначати користувацькі процедури та функції та викликати їх з основної програми. Між процедурою і функцією практично немає різниці, різниця полягає у логічному сенсі цих підпрограм: функції зазвичай використовуються обчислення якогось значення, а процедури - до виконання дій. Проте і процедури, і функції можуть виконувати операції та передавати значення основній програмі. Незважаючи на це, все ж таки не варто забувати про призначення цих підпрограм: функції - для обчислення, процедури - для дій.

Функція оголошується операторомFunction, після якого слід назва користувальницької функції, яка не повинна збігатися з жодним зарезервованим словом мови Visual Basic, далі вказуються змінні, які будуть передаватися підпрограмі як параметри - вказівка ​​змінних у цій конструкції означає виділення осередків пам'яті для змінних підпрограм ( змінних функції). У тілі підпрограми структура сценарію нічим не відрізняється від звичайної програми (тут можна оголошувати додаткові змінні, робити операції, використовувати інші функції та процедури), в кінці тіла повинен бути оператор присвоєння функції якомусь значенню - це значення і буде повернено основній програмі. Перервати виконання функції можна оператором Exit Function, але в цьому випадку потрібно не забути надати функції якесь значення, інакше сценарій видасть помилку. Завершується функція оператором End Function.

Визначення функції

Function () If Then = Exit Function End If = End Function

Виклик функції

= ()

Процедура визначається аналогічно до функції, але іншим оператором -Sub. Оскільки процедура не повертає основній програмі жодних значень, то оператора присвоєння перед виходом із процедури немає. Перервати виконання процедури можна за допомогою команди Exit Sub, а завершується вся конструкція оператором End Sub. Щоб в основній програмі викликати процедуру, необхідно використовувати ключове слово Callі ім'я функції з необхідними аргументами. (Ключове слово Call не є обов'язковим, але я рекомендую його використовувати, щоб уникнути неправильних викликів процедури.)

Визначення процедури

Sub () If Then Exit Sub End If End Sub

Виклик процедури

()

До речі, процедури та функції повинні розташовуватися наприкінці сценарію.

Під час роботи підпрограми значення змінних основної частини скрипта не змінюються, навіть якщо підпрограмі є однойменні змінні. Щоб підпрограма мала можливість змінювати значення змінних основного сценарію, необхідно в аргументах підпрограми задати властивість змінних як ByRef. За замовчуванням, всі змінні визначаються з властивістю ByVal.

Sub (ByRef [, arguments]) = End Sub

В даному випадку аргумент передається за посиланням на комірку пам'яті - змінюється значення змінної переважно сценарії. Іншими словами, за допомогою параметра ByRef процедура перетворюється на функцію - підпрограма повертає результат обчислень в основну програму.

Обробка помилок виконання сценарію

За замовчуванням усі помилки обробляються сценарієм в автоматичному режимі, і при виникненні помилки робота сценарію зупиняється. Для відключення автоматичної обробки помилок потрібно використовувати спеціальну директиву On Error Resume Next, яка відключає автоматичну обробку помилок і продовжує роботи сценарію навіть за наявності. Для ручної обробки помилок необхідно звернутися до вбудованого об'єкту Err, який зберігає статус помилок. Об'єкт Err має такі властивості та методи:

Number повернення номера останньої помилки; Description повернення опису останньої помилки; Clear " очищення об'єкта Err; Raise " виклик тестової помилки.

Приклад ручної обробки помилки:

On Error Resume Next iTotalPoints = InputBox("Введіть загальну кількість очок") iNumberOfTests = InputBox("Введіть кількість тестів") iAvarage = iTotalPoints / iNumberOfTests Select Case Err.Number Case 0 " немає помилок; CStr(iAvarage) Case 11" розподіл на нуль; WScript.Echo "Кількість тестів не може дорівнювати нулю" Case 13 "невідповідність типів; WScript.Echo "Ви ввели нечислове значення "Case Else" немає помилок; WScript.Echo "Невідома помилка WScript.Quit" End Select

Об'єкти, їх методи та властивості

VBS-сценарії, як і їхній батько - мова Visual Basic, є об'єктно-орієнтованою мовою програмування, тобто основною концепцією є поняття об'єктів та класів

Клас - це тип, що описує пристрій об'єктів. Об'єкт має на увазі під собою щось, що має певну поведінку і спосіб подання, об'єкт - це екземпляр класу. Клас можна порівняти з кресленням, за яким створюються об'єкти. Зазвичай, класи розробляють таким чином, щоб їх об'єкти відповідали об'єктам предметної області.

Отже, щоб працювати з об'єктом, його потрібно спочатку створити, використовуючи класи з потрібної бібліотеки:

Set = CreateObject( .)

Видалити об'єкт можна, надавши йому значення Nothing:

Set = Nothing

Усі об'єкти, з якими працює Windows Script Host, мають методи та властивості. Щоб звернутися до методу, необхідно вказати об'єкт, а через точку – метод із необхідними параметрами.

. [, Param2, ..., ParamN] Call .([, Param2, ..., ParamN])

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

. = . = . = .

приклад. Створення об'єкта файлової системи, звернення до способу створення папки, видалення об'єкта.

Set oFSO = CreateObject("Scripting.FileSystemObject") Call oFSO.CreateFolder("C:\Test") Set oFSO = Nothing

Зверніть увагу, що поняття об'єкт відноситься до логіки сценарію, а не до логіки файлової системи. Тобто коли ми говоримо "видалення об'єкта", ми маємо на увазі логічний об'єкт сценарію, який ніяк не впливає на видалення якихось частин файлової системи.

Щоб дізнатися, які існують бібліотеки у Вашій операційній системі, включені в бібліотеки класи, їх методи та властивості, можна скористатися провідником об'єктів, наприклад Microsoft Word:

  1. Запустіть MS Word.
  2. У головному меню вибрати Tools -> Macro -> Visual Bacis Editor
  3. У вікні редагування макросів вибрати View -> Object Browser

Якщо якась бібліотека не відображена у списку, її можна підключити через меню Tools -> References.

У сценаріях є методи, які не входять до жодного класу, вони доступні безпосередньо в тілі сценарію:

MsgBox( [, Params]) " виведення віконного повідомлення на екран; InputBox( [, Params]) " виведення діалогового вікна на екран.

Приклад виведення діалогового вікна із запитом тексту, а потім виведення на екран віконного повідомлення із введеним текстом.

MyValue = InputBox("Введіть текст", "Перше вікно", "Текст потрібно ввести тут") MyResult = MsgBox(MyValue, 1, "Друге вікно")

Методи та властивості кореневого класу WScript

Методи та властивості кореневого класу WScript не вимагають створення об'єкта - вони автоматично доступні для використання безпосередньо в тілі сценарію.

CreateObject( .) "Створення об'єкта; GetObject( ) " підключення об'єкта з файлу; ConnectObject( , ) " підключення до подій існуючого об'єкта; DisconnectObject( ) " відключення від подій об'єкта; Echo() " виведення повідомлення на екран; Arguments " повернення масиву аргументів командного рядка сценарію; Name " повернення імені інтерпретатора сценаріїв; Path " повернення шляху до інтерпретатора сценаріїв; FullName " повернення повного імені інтерпретатора сценаріїв; Version "повернення версії інтерпретатора сценаріїв; BuildVersion" повернення версії складання інтерпретатора сценаріїв; ScriptName " повернення імені файлу сценарію; ScriptFullName " повернення повного імені файлу сценарію; Interactive " встановлення або повернення режиму інтерактивності сценарію; Sleep( ) " призупинення роботи на вказану кількість мілісекунд; Quit " припинення роботи сценарію.

Застосування цих методів і властивостей докладніше ми розберемо у прикладах інших класів.

Методи та властивості класу Shell

Для роботи з операційною системою використовується спеціальний клас Shell, який дозволяє виконувати такі операції як запуск програм, зміна реєстру, створення ярликів, доступ до системних папок та системних змінних, доступ до системного журналу. Отже, методи та властивості класу Shell:

ExpandEnvironmentStrings( ) " повернення значення запитаної змінної системи; EnviEnvironment( ) " повернення масиву змінних системи; CreateShortcut( ) " створення ярлика; Popup ( [, Params]) " виведення віконного повідомлення на екран; RegRead( ) " зчитування значення з реєстру; RegWrite( ,[, Type]) " запис значення до реєстру; RegDelete( ) " видалення значення з реєстру; LogEvent( ,) " запис події до системного журналу; Run( [, Params]) " запуск програми у новому процесі; Exec( ) " запуск програми в дочірній консолі; AppActivate( ) " активація вікна; SendKeys( <Keys>) " відправка символів у активне вікно; CurrentDirectory " установка чи повернення поточної директорії; SpecialFolders() " повернення масиву службових папок чи шляху " запитаної службової папки.</p><p>приклад. Використання методів та властивостей класу Shell.</p><p>" Створення об'єкта класу Shell Set oShell = Wscript.CreateObject("WScript.Shell") " Запуск калькулятора oShell.Run("Calc.exe") " Затримка WScript.Sleep(100) " Запуск блокнота oShell.Run("Notepad.exe ") " Затримка WScript.Sleep(100) " Перемикання на вікно калькулятора oShell.AppActivate "Calculator" " Затримка WScript.Sleep(100) " Імітація натискання клавіш oShell.SendKeys("1(+)2(=)") " Отримання шляхи до робочого столу sDesktopPath = oShell.SpecialFolders("Desktop") " Створення об'єкта ярлика Set oLink = oShell.CreateShortcut(sDesktopPath & "\Test.lnk") " Налаштування ярлика oLink.TargetPath = WScript.ScriptFullName .Hotkey = "CTRL+SHIFT+T" oLink.IconLocation = "notepad.exe,0" oLink.Description = "Test link" oLink.WorkingDirectory = sDesktopPath oLink.Save " Створення об'єкта середовища та отримання в нього властивостей системи Set oSysEnv = oShell.Environment("SYSTEM") " Виведення повідомлення про кількість процесорів на екран MyResult = oShell.Popup("Number of processors: " & oSysEnv("NUMBER_OF_PROCESSORS"), _ 3, "Message", 0) " Отримання шляху до папки Windows та виведення повідомлення на екран MyResult = oShell.Popup("Windows directory: " & _ oShell.ExpandEnvironmentStrings("%WINDIR%"), 3, "Message", 0) " Читання ключа реєстру та виведення його значення на екран WScript. Echo oShell.RegRead ("HKLM\Software\Microsoft\Windows\CurrentVersion\ProductID") " Запис строкового значення в реєстр MyResult = oShell.RegWrite("HKCU\ScriptEngine\Value", "My Value") " Запис числового значення в реєстр MyResult = oShell.RegWrite("HKCU\ScriptEngine\Key", 1, "REG_DWORD") " Видалення ключа реєстру MyResult = oShell.RegDelete("HKCU\ScriptEngine\") " Запис події в системний журнал MyResult = oShellLog. , "Test Script Completed")</p><h3>Методи та властивості класу Network</h3> <p>Як ми вже переконалися, VBS-сценарії можуть працювати з оболонкою Windows, але це не єдина їхня можливість. За допомогою класу Network можна отримати доступ до мережних об'єктів та керувати ними. Давайте краще розберемо клас Network:</p><p>ComputerName " повернення імені комп'ютера; UserDomain " повернення імені домену; UserName " повернення імені користувача; EnumNetworkDrives " повернення списку підключених мережевих дисків; MapNetworkDrive( <LocalName>, <RemoteName>, ) " підключення мережного ресурсу; RemoveNetworkDrive( <Name>, , ) " відключення мережного ресурсу; EnumPrinterConnections " повернення списку мережевих принтерів; AddWindowsPrinterConnection( <PrinterPath>) " підключення мережного принтера; AddPrinterConnection( <LocalName>, <RemoteName>[, UpdateProfile, User, Password] " підключення мережного принтера на вказаний порт; RemovePrinterConnection( <Name>[,Force, UpdateProfile]) " відключення мережного принтера; SetDefaultPrinter( <PrinterName>) "вибір принтера за замовчуванням;</p><p>приклад. Використання методів та властивостей класу Network.</p><p>" Створення об'єкта класу Network Set oNetwork = WScript.CreateObject("WScript.Network") " Виведення повідомлення про ім'я комп'ютера WScript.Echo "Computer Name = " & oNetwork.ComputerName " Виведення повідомлення про ім'я поточного користувача WScript.Echo "User Name = & oNetwork.UserDomain & "\" & oNetwork.UserName " Підключення мережного диска oNetwork.MapNetworkDrive "Z:" "\\Server\Share" " Отримання колекції підключених мережних дисків Set oDrives = oNetwork.EnumNetworkDrives " Виведення повідомлень про підключені мережні диски For i=0 Для oDrives.Count -1 step 2 WScript.Echo "Drive " & oDrives.Item(i) & " = " & oDrives.Item(i+1) Next " Видалення мережного диска oNetwork.RemoveNetworkDrive "Z:" " Підключення мережного принтера oNetwork.AddPrinterConnection "LPT1", "\\Server\Printer" " Установка принтера за замовчуванням oNetwork.SetDefaultPrinter "\\Server\Printer" " Отримання колекції про підключені принтери Set oPrinters = oNetwork.EnumPrinter</p><h3>Методи та властивості класу FileSystemObject</h3> <p>Дуже часто в сценаріях трапляються такі випадки, коли необхідно створити, видалити, перемістити або змінити на диску комп'ютера. Це завдання дозволяє вирішити клас FileSystemObject, призначений для роботи з файловою системою. Нижче наведено об'єкти, які можуть створити цей клас:</p> <ul><li>FileSystemObject - головний об'єкт, який дозволяє створювати, видаляти, керувати дисками, папками та файлами загалом;</li> <li>Drive – об'єкт, що дозволяє збирати інформацію про диски системи;</li> <li>Drives - об'єкт, що зберігає у собі список дисків системи;</li> <li>Folder - об'єкт, що дозволяє створювати, видаляти, переміщати папки, а також збирати інформацію про них та їх вміст;</li> <li>Folders - об'єкт, що зберігає список підпапок зазначеної папки;</li> <li>File - об'єкт, що дозволяє створювати, видаляти, переміщати файли, і навіть збирати інформацію про них;</li> <li>Files - об'єкт, що зберігає список файлів зазначеної папки;</li> <li>TextStream - об'єкт, що дозволяє читати та створювати текстові файли.</li> </ul><p>Методи та властивості класу FileSystemObject (головного об'єкта):</p><p>BuildPath( <Path>, <Name>) " додає ім'я до вказаного шляху; GetAbsolutePathName( <PathSpec>) " повертає повний шлях; GetBaseName( <Path>) "повертає ім'я папки або файлу (без "розширення) у зазначеному шляху; GetDrive( <DriveSpec>) " створює об'єкт Drive; GetDriveName( <Path>) " повертає ім'я диска у вказаному шляху; GetExtensionName( <Path>) "повертає розширення файлу в" зазначеному шляху; GetFile( <FileSpec>) " створює об'єкт File; GetFileName( <PathSpec>) "повертає ім'я файлу (без розширення)" у зазначеному шляху; GetFolder( <FolderSpec>) " створює об'єкт Folder; GetParentFolderName( <Path>) " повертає ім'я папки у якому зберігається " файл чи папка по зазначеному шляху; GetSpecialFolder( <FolderSpec>) " створює об'єкт Folder до зазначеної " службової папці; GetTempName "повертає випадково згенероване" ім'я файлу; DriveExists( <DriveSpec>) " перевіряє існування диска; FolderExists( <FileSpec>) " перевіряє існування папки; CopyFolder( <Source>, <Destination>[, Overwrite]) " копіює папку; MoveFolder( <Source>, <Destination>) " переміщає папку; DeleteFolder( <FolderSpec>[, Force]) " видаляє папку; CreateFolder( <FolderName>) " створює папку; FileExists( <Filespec>) " перевіряє існування файлу; CopyFile( <Source>, <Destination>[, Overwrite]) " копіює файл; MoveFile( <Source>, <Destination>) " переміщає файл; DeleteFile( <FileSpec>[, Force]) " видаляє файл; CreateTextFile( <FileName>[, Overwrite, UnioCode]) " створює текстовий файл; OpenTextFile( <FileName>[, IOMode, Create, Format]) " відкриває текстовий файл для читання або "запису.</p><p>Об'єкти Drives, Folders і Files класу FileSystemObject зберігають у собі інформацію про диски, папках і файлах і, переважно, використовуються для збору інформації про файлову систему. Вони мають лише дві властивості:</p><p>Count " повертає кількість елементів у колекції; Item( <ObjectName>) " повертає запис із зазначеним індексом з колекції (не використовується), " для перебору елементів колекції намітається цикл For Each.</p><p>Щоб було зрозуміліше, що таке колекція об'єктів, розглянемо приклад виведення на екран списку файлів кореня диска C:</p><p>" Створення об'єкта класу FileSystemObject set oFSO = CreateObject("Scripting.FileSystemObject") " Створення об'єкта Folder Set oFolder = oFSO.GetFolder("C:\") " Отримання колекції файлів Set oFilesCollection = oFolder.Files " Отримання кількості елементів у колекції sResul = sResult & oFilesCollection.Count & " files in C:\" & vbCrLf " Читання атрибутів кожного файлу з колекції For Each oFile in oFilesCollection sResult = sResult & oFile.Name & vbTab sResult = sResult & " на екран MsgBox(sResult)</p><p>Об'єкт Drive надає доступ до властивостей локального або мережного диска:</p><p>AvailableSpace "повертає розмір вільного місця на диску, доступного користувачеві; DriveLetter" повертає букву диска; DriveType "повертає тип диска; FileSystem" повертає тип файлової системи диска; FreeSpace "повертає розмір вільного місця на диску; IsReady" повертає доступність диска; Path "повертає шлях до диска; RootFolder" створює об'єкт Folder, що вказує на корінь диска; SerialNumber " повертає серійний номер диска; ShareName " повертає мережне ім'я диска; TotalSize " повертає ємність диска в байтах; VolumeName " повертає або встановлює мітку диска.</p><p>Об'єкт Folder надає доступ до всіх властивостей папки, а також дозволяє робити над нею дії:</p><p>Attributes " повертає атрибути папки; DateCreated " повертає дату створення папки; DateLastAccessed " повертає дату останнього доступу до папки; DateLastModified " повертає дату зміни папки; Drive "повертає букву диска, на якому розташована папка; Files" повертає колекцію файлів папки; IsRootFolder " повертає True, якщо папка - це корінь диска; Name " повертає ім'я папки; ParentFolder створює об'єкт Folder, що вказує на батьківську папку; Path "повертає шлях до папки; ShortName" повертає ім'я папки у форматі 8.3; ShortPath "повертає шлях до папки у форматі 8.3; Size" повертає розмір папки; SubFolders "повертає колекцію підпапок; Type" повертає тип папки; Copy( <Destination>[, Overwrite]) " копіює папку; Move( <Destination>) " переміщає папку; Delete( <Force>) " видаляє папку; CreateTextFile( <FileName>[, Overwrite, UniCode]) " створює у папці текстовий файл.</p><p>Об'єкт File аналогічний об'єкту Folder - він надає доступ до всіх властивостей файлу, а також дозволяє робити над ним дії:</p><p>Attributes " повертає атрибути файлу; DateCreated " повертає дату створення файла; DateLastAccessed " повертає дату останнього доступу до файлу; DateLastModified " повертає дату зміни файлу; Drive " повертає букву диска, у якому розташований файл; Name " повертає ім'я файла; ParentFolder створює об'єкт Folder, що вказує на батьківську папку; Path "повертає шлях до файлу; ShortName" повертає ім'я файлу у форматі 8.3; ShortPath "повертає шлях до файлу у форматі 8.3; Size" повертає розмір файлу; Type " повертає тип файлу; Copy( <Destination>[, Overwrite]) " копіює файл; Move( <Destination>) " переміщає файл; Delete( <Force>) " видаляє файл; OpenAsTextStream() " відкриває текстовий файл читання чи записи.</p><p>Об'єкт TextStream - інструмент доступу до вмісту файлу. За допомогою нього можна читати та змінювати файл:</p><p>AtEndOfLine " показує, чи досягнуто кінець рядка; AtEndOfStream " показує, чи досягнуто кінець рядка; Column" повертає номер колонки, в якій знаходиться курсор читання; Line" повертає номер рядка, в якому знаходиться курсор читання; Close "закриває файл - звільняє його інших процесів; Read( <CharactersNumber>) "зчитує зазначену кількість символів, починаючи від позиції" курсора читання; ReadAll "зчитує весь файл; ReadLine" зчитує рядок, в якому знаходиться курсор читання; Skip( <CharactersNumber>) " пропускає зазначену кількість символів, починаючи з позиції " курсора читання; SkipLine " пропускає рядок, де знаходиться курсор читання; Write( <String>) " записує рядок; WriteLine( <String>) " записує рядок і переводить курсор запису на наступний рядок; WriteBlankLines( <Lines>) " записує вказану кількість порожніх рядків.</p><p>Ми познайомилися з усіма методами та властивостями класу FileSystemObject, розглянемо приклад використання цього класу:</p><p> " Завдання констант кодів системних папок Const WindowsFolder = 0 Const SystemFolder = 1 Const TemporaryFolder = 2 " Завдання констант кодів типів доступу до текстового файлу Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 " Створення об'єкта класу FileSystem Scripting.FileSystemObject") " Отримання колекції дисків Set DrivesCollection = oFSO.Drives " Обробка кожного диска для отримання його мітки або мережного імені For Each oDrive in DrivesCollection = sResult & oDrive.ShareName & vbCrLf ElseIf oDrive.IsReady Then sResult = sResult & oDrive.VolumeName & vbCrLf Else sResult = sResult & vbCrLf End If Next = oFSO.GetDrive("C") sResult = oDrive.DriveLetter & ": - " " Отримання типу диска C: Select Case oDrive.DriveType Case 0: sResult = sResult & "Unknown - " Case 1: sResult = sResult & "Removable - " Case 2: sResult = sResult & "Fixed - " Case 3: sResult = sResult & "Network - " Case 4: sResult = sResult & "CD-ROM - " Case 5: sResult = sResult & "RAM Disk - " End Select " Визначення доступності диска та отримання його властивостей If oDrive. oDrive.AvailableSpace/1024, 0) & " Kbytes" Else sResult = sResult & "No ready" End If " Виведення результатів на екран Wscript.Echo(sResult) " Створення об'єкта службової папки (папка тимчасових файлів Windows) Set oTempFolder GetSpecialFolder(TemporaryFolder) " Створення об'єкта текстового файлу (і створення його в корені диска C:) Set oFile = oFSO.CreateTextFile("C:\TestFile.txt", True) " Запис у текстовий файл oFile.WriteLine("This is a test.") oFile.WriteLine(sResult) " Закриття текстового файлу та звільнення його для інших процесів oFile.Close " Перевірка на наявність файлу в папці тимчасових файлів Windows, видалення цього файлу If oFSO.FileExists(oFSo.BuildPath(oTempFolder.Path, "TestFile.txt")) Then _ oFSO.DeleteFile(oFSo.BuildPath(oTempFolder.Path, "TestFile.txt")) " Створення об'єкта файлу Set oFile = oFSO.GetFile("C:\TestFile.txt") " Переміщення файлу в папку тимчасових файлів Windows oFile.Move(oFSo.BuildPath(oTempFolder.Path, "TestFile.txt")) " Зміна атрибута файлу If oFile.Attributes and 32 Then oFile. Attributes = oFile.attributes - 32 Wscript.Echo("Archive bit is cleared") Else oFile.Attributes = oFile.attributes + 32 Wscript.Echo("Archive bit is set") End If sResult = oFile.Path & vbCrLf & oFile .DateLastModified & ":" & vbCrLf " Створення об'єкта потоку шляхом відкриття файлу для читання Set oTestFile = oFSO.OpenTextFile(oFile.Path, ForReading, False) " Читання потоку, поки не зустрінутий його кінець Do While oTestFile.AtEndOfStream<>True sResult = sResult & oTestFile.ReadLine Loop " Закриття текстового файлу та звільнення його для інших процесів oTestFile.Close " Виведення повідомлення на екран Wscript.Echo(sResult)</p><h3>Сценарій "Видалення старих файлів"</h3> <p>Цей сценарій призначений для очищення системи від застарілих файлів у тимчасових каталогах Windows та профілю користувача. У цьому прикладі можна побачити як працюють практично всі описані конструкції: структура сценарію, назва змінних, робота з масивами і колекціями, ручна обробка помилок, зчитування системних змінних, створення текстового файлу журналу роботи сценарію, робота з файловою системою, використання процедур.</p><p> " ==== Script Information Header ==== " script name: Purge Temp " version: 1.0 " date: 16.07.08 " autor: Bochkarev Vitaly " description: Скрипт видаляє застарілі тимчасові файли з комп'ютера " ==== Script Main Logic ==== " Увімкнення ручної обробки помилок On Error Resume Next " Константа часового інтервалу, коли файли вважаються застарілими Const PurgeTime = 14 " днів " Винятки - профілі користувачів, які не повинні оброблятися Dim aExceptions(3) aExceptions(0) = " Default User" aExceptions(1) = "LocalService" aExceptions(2) = "NetworkService" aExceptions(3) = "All Users" " Створення об'єктів оболонки та файлової системи Set oShell = CreateObject("wscript.shell") Set oFSO = CreateObject ("Scripting.Filesystemobject") " Визначення шляхів службових папок sProgramFiles = oShell.ExpandEnvironmentStrings("%ProgramFiles%") sWinDir = oShell.ExpandEnvironmentStrings("%WinDir%") sWinTempFolder = sWinDir Documents and Settings" " Створення сценарійного фурналу sLogFileName = sWinTempFolder & "\PurgeTemp_" & Date sLogFileName = Replace(sLogFileName, ".", "_") sLogFileName = Replace(sLogFileName, "/", "_") Set oLogFile = oFSO.CreateTextFile(sLogFileName & ".log",true) oLogFile.WriteLine "========== Start purging ==========" " Очищення тимчасової папки Windows oLogFile.WriteLine vbCrLf & "========== Windows Temporary folder ==========" PurgeFolder(sWinTempFolder) " Очищення тимчасової папки профілю користувача та файлів Інтернет oLogFile.WriteLine vbCrLf & _ "===== ===== Users Temporary folder and Users Temporary Internet Files ==========" Set oDocuments = oFSO.GetFolder(sDocuments) Set colProfiles = oDocuments.SubFolders For Each oProfile In colProfiles bFlag = false For Each sException вExceptions if InStr(oProfile.Path,sException) > 0 bFlag = true exit for end if Next If bFlag = False Then PurgeFolder(oProfile.Path & "\Local Settings\Temp") PurgeFolder(oProfile.Path & " Settings\Temporary Internet Files") End If Next " Очищення карантину NOD32 oLogFile.WriteLine vbCrLf & "========== NOD32 Quarantine ==========" sQuarantine = sProgramFiles & "\Eset \Infected" PurgeFolder(sQuarantine) " Закриття файлу журналу oLogFile.WriteLine vbCrLf & "========== Stop purging ==========" oLogFile.Close " Процедура PurgeFolder - видалення старих файлів Sub PurgeFolder(sFolderPath) " Створення об'єкта Folder Set oFolder = oFSO.GetFolder(sFolderPath) " Отримання колекції файлів Set colFiles = oFolder. Files " Обробка кожного файлу з колекції For each oFile in colFiles " Перевірка, чи файл застарілим If (Date-oFile.DateLastModified) > PurgeTime and (Date-oFile.DateCreated) > _ PurgeTime Then " Запис повідомлення в журнал сценарію oLogFile.Write oFile.Path & vbTab & oFile.DateCreated " Видалення застарілого файлу oFSO.DeleteFile oFile.Path, True " Перевірка на наявність помилок if err.Number<>0 then " Запис повідомлення про помилку в журнал сценарію oLogFile.Writeline "-----> Error # " & CStr(Err.Number) _ & " " & Err.Description " Очищення помилки Err.Clear end if " Пауза в 20 мілісекунд WScript.Sleep 20 End if Next " Отримання колекції підпапок Set colSubFolders = oFolder.SubFolders " Обробка кожної підпапки For Each oSubFolder In colSubFolders " Рекурсивний виклик процедури видалення старих файлів - підпрограма викликає " сама P. If oSubFolder.Size = 0 Then " Запис повідомлення в журнал сценарію oLogFile.Writeline oSubFolder.Path & vbTab & oSubFolder.DateCreated " Видалення порожньої папки oFSO.DeleteFolder oSubFolder.Path " Перевірка на наявність помилок.<>0 then " Запис повідомлення про помилку в журнал сценарію oLogFile.Writeline "-----> Error # " & CStr(Err.Number) _ & " " & Err.Description " Очищення помилки Err.Clear End if End if Next End Sub</p><p>Ми познайомилися з основами сценаріїв Visual Basic Script. Давайте підіб'ємо підсумок, і визначимо переваги та недоліки таких сценаріїв:</p> <ul><li>сценарії не вимагають компіляції та їх код у будь-який момент можна відредагувати;</li> <li>VBS-сценарії практично не обмежені у функціональності та можуть використовувати різні системні бібліотеки та об'єкти інших додатків;</li> <li>VBS файли можуть виконуватися як в консолі, так і у віконному режимі, тому користувач може контролювати видимість ходу виконання сценарію;</li> <li>VBS-сценарії дозволяють використовувати користувацькі процедури та функції;</li> <li>ця мова ідеально підходить для роботи з рядковими та числовими змінними, датами, а також для обробки текстових файлів, керування системою та доменом;</li> <li>VBS-сценарії складні в написанні та вимагають навичок програмування;</li> <li>такі сценарії працюють лише в операційних системах сімейства Windows.</li> </ul><p>Віталій Бочкарьов</p> <h2>Зовнішні посилання</h2> <p>Секція зовнішніх посилань, тобто посилань на інші сайти, до яких даний ресурс не має жодного відношення.</p> <p>Щось я зовсім втік уперед і не розповів вам про дві <b>функції діалогових вікон: MsgBox та InputBox</b>. У цьому дуже невеликому уроці я розповім про всі приблуди до цих двох функцій. Так само існують інші способи створення діалогових вікон, але для цього знадобляться <b>об'єкти WSH</b>, про які буде розмова у наступних уроках.</p> <h2>Функція MsgBox</h2> <p>Найпростіша функція для виведення повідомлення. Звичайно вона складніша, ніж <b>Echo об'єкта WScript</b>, Але й об'єкт їй не потрібний. <br><i>Синтаксис:</i> <b>MsgBox (Prompt[, Buttons][, Title][, Helpfile, Context])</b></p> <ul><li><b>Prompt</b>- Текст повідомлення.</li> <li><b>Buttons</b>— Кнопки та режим вікна, що виводяться.</li> <li><b>Title</b>- Назва віконця.</li> <li><b>Helpfile</b>- Файл довідки (*.hlp)</li> <li><b>Context</b>- Номер розділу довідки.</li> </ul><p>Параметр <b>Buttons</b>може одночасно набувати кількох значень. Для того щоб їх вказати, використовується знак «+» або просто використовую суму значень. Значення цього параметра наведено нижче.</p> <h3>Константи для діалогових вікон (кнопки, що виводяться):</h3> <ul><li><b>vbOKOnly</b>- Значення 0. Виводити кнопку ОК.</li> <li><b>vbOKCancel</b>— Значення 1. Виводити кнопки: ОК та Скасувати.</li> <li><b>vbAbortRetryIgnore</b>— Значення 2. Виводити кнопки: Перервати, Повторити та Пропустити.</li> <li><b>vbYesNoCancel</b>— Значення 3. Виводити кнопки: Так, Ні та Скасувати.</li> <li><b>vbYesNo</b>- Значення 4. Виводити кнопки: Так і Ні.</li> <li><b>vbRetryCancel</b>— Значення 5. Виводити кнопки: Повторити та Скасувати.</li> </ul><h3>Константи для діалогових вікон (значки):</h3> <ul><li><b>vbCritical</b>- Значення 16. Вивести значок Stop Mark.</li> <li><b>vbQuestion</b>- Значення 32. Вивести значок Question Mark.</li> <li><b>vbExclamation</b>- Значення 48. Вивести значок Exclamation Mark.</li> <li><b>vbInformation</b>- Значення 64. Вивести значок Information Mark.</li> </ul><h3>Константи для діалогових вікон (за замовчуванням):</h3> <ul><li><b>vbDefaultButton1</b>— Значення 0. Перша кнопка вибирається за промовчанням.</li> <li><b>vbDefaultButton2</b>— Значення 256. Друга кнопка вибирається за промовчанням.</li> <li><b>vbDefaultButton3</b>— Значення 512. Третя кнопка вибирається за промовчанням.</li> <li><b>vbDefaultButton4</b>— Значення 768. Четверта кнопка вибирається за промовчанням.</li> </ul><h3>Константи для діалогових вікон (Режим вікна):</h3> <ul><li><b>vbApplicationModal</b>- Значення 0. Виводиться в модальному режимі.</li> <li><b>vbSystemModal</b>— Значення 4096. Виводиться в модальному режимі та розташовується поверх усіх програм.</li> </ul><h3>Інше:</h3> <ul><li><b>Значення 262144</b>- Поверх всіх вікон.</li> <li><b>Значення 524288</b>— Текст у вікні виводиться праворуч.</li> </ul><p>Варто зазначити, що параметр <b>Buttons</b>не може набувати кількох значень з однієї і тієї ж категорії. Дані значення просто складаються. Тобто, вам не вдасться встановити кілька наборів кнопок або іконок одночасно.</p> <p>"Урок VBScript №16: "Функція MsgBox та InputBox "file_1.vbs "********************************** ********************** MsgBox "Привіт", 5+16, "Назва" MsgBox "Привіт", vbRetryCancel+16, "Назва" MsgBox "Привіт" , vbRetryCancel+524288, "Назва" MsgBox "Привіт", vbAbortRetryIgnore + vbInformation + vbDefaultButton2 + vbSystemModal + 524288, "Назва" MsgBox "Привіт", 528706</p> <table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums " data-settings="show"> </td> <td class="crayon-code"><p>"******************************************************** </p><p>"Урок VBScript №16:</p><p>"Функція MsgBox та InputBox</p><p>"file_1.vbs</p><p>"******************************************************** </p><p>MsgBox "Привіт", 5 + 16, "Назва"</p><p>MsgBox "Привіт", vbRetryCancel + 16, "Назва"</p><p>MsgBox "Привіт", vbRetryCancel + 524288, "Назва"</p><p>MsgBox "Привіт" , vbAbortRetryIgnore + vbInformation + vbDefaultButton2 + vbSystemModal + 524288 , "Назва"</p><p>MsgBox "Привіт" , 528706 , "Назва"</p> </td> </tr></table><p>Крім того, функція MsgBox може повертати результат натискання кнопок. Його можна присвоїти змінною і в такий спосіб визначити натиснуту кнопку.</p> <h3>Результат, що повертається натиснутих кнопок (константи):</h3> <ul><li><b>vbOK</b>- Значення 1. Кнопка Ок.</li> <li><b>vbCancel</b>- Значення 2. Кнопка Скасувати.</li> <li><b>vbAbort</b>- Значення 3. Кнопка Перервати.</li> <li><b>vbRetry</b>- Значення 4. Кнопка Повтор.</li> <li><b>vbIgnore</b>- Значення 5. Кнопка Пропустити.</li> <li><b>vbYes</b>- Значення 6. Кнопка Так.</li> <li><b>vbNo</b>- Значення 7. Кнопка Ні.</li> </ul><p>"************************************************* ******* "Урок VBScript №16: "Функція MsgBox та InputBox "file_2.vbs "*************************** ***************************** Dim Knopka Knopka = MsgBox("Натисніть на будь-яку кнопку",2,"Заголовок") If Knopka = 3 Then MsgBox "Ви натиснули ктопку - Перервати" ElseIf Knopka = 4 Then MsgBox "Ви натиснули ктопку - Повторити" Else MsgBox "Ви натиснули ктопку - Пропустити" End If</p> <p>"************************************************* ******* "Урок VBScript №16: "Функція MsgBox та InputBox "file_4.vbs "*************************** ***************************** Dim Dict, AboutBomb Set Dict = CreateObject("Scripting.Dictionary") Dict.CompareMode = 1 Dict .Add "Жовтий", "Бомба вибухнула!" Dict.Add "Червоний", "Ви знешкодили бомбу!" Dict.Add "Синій", "Бомба вибухнула!" InputBox("Виявлено бомбу! Який провід різати: жовтий, червоний, синій чи зелений??","Виявлено бомбу!!!","Вводити колір дроту сюди...") If Dict.Exists(AboutBomb) then MsgBox Dict.Item(AboutBomb) else MsgBox "У тебе погано із зором! Такого дроту немає! Бомба вибухнула! end if</p> <table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums " data-settings="show"> </td> <td class="crayon-code"><p>"******************************************************** </p></td></tr></table> <!-- SAPE RTB JS --> <script async="async" src="https://cdn-rtb.sape.ru/teasers/js/291/2/92291.js" type="text/javascript"> </script> <!-- SAPE RTB END --><br> <br> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy loading=lazy>");</script> </article> <div class="single-share"> <div class="row align-middle"> <div class="columns small-12 medium-expand"> <div class="single-share__title">Розповісти друзям</div> </div> </div> <div class="single-share-links"> <div class="row"> <div class="columns small-6 medium-3"> <a href="#" onClick="window.open('https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2F128gb.ru%2Fvbs-komandy-vbscript-osnovy-vbscript-metody-i-svoistva-klassa-shell.html', 'sharer', 'toolbar=0,status=0, width=700, height=400'); return false" title="" class="single-share-links-item single-share-links-item--fb"> <div class="row"> <div class="columns"><i class="fa fa-facebook-official single-share-links-item__icon"></i> </div> <div class="columns text-right js-fb-sharer"><span class="single-share-links-item__text"></span> </div> </div> </a> </div> <div class="columns small-6 medium-3"> <a href="#" onClick="window.open('http://vk.com/share.php?url=https%3A%2F%2F128gb.ru%2Fvbs-komandy-vbscript-osnovy-vbscript-metody-i-svoistva-klassa-shell.html', 'sharer', 'toolbar=0,status=0, width=700, height=400'); return false" title="" class="single-share-links-item single-share-links-item--vk"> <div class="row"> <div class="columns"><i class="fa fa-vk single-share-links-item__icon"></i> </div> <div class="columns text-right js-vk-sharer"><span class="single-share-links-item__text"></span> </div> </div> </a> </div> <div class="columns small-6 medium-3"> <a href="#" onClick="window.open('http://twitter.com/share?url=https%3A%2F%2F128gb.ru%2Fvbs-komandy-vbscript-osnovy-vbscript-metody-i-svoistva-klassa-shell.html', 'sharer', 'toolbar=0,status=0, width=700, height=400'); return false" title="" class="single-share-links-item single-share-links-item--tw"> <div class="row"> <div class="columns"><i class="fa fa-twitter single-share-links-item__icon"></i> </div> <div id="twitter_sharer" class="columns text-right">Twitter <span class="single-share-links-item__text"></span> </div> </div> </a> </div> <div class="columns small-6 medium-3"> <a href="#" onClick="window.open('https://connect.ok.ru/dk?st.cmd=WidgetSharePreview&st.shareUrl=https%3A%2F%2F128gb.ru%2Fvbs-komandy-vbscript-osnovy-vbscript-metody-i-svoistva-klassa-shell.html/&utm_source=share2', 'sharer', 'toolbar=0,status=0, width=700, height=400'); return false" title="" class="single-share-links-item single-share-links-item--ok"> <div class="row"> <div class="columns"><i class="fa fa-odnoklassniki single-share-links-item__icon"></i> </div> <div class="columns text-right js-ok-sharer"><span class="single-share-links-item__text"></span> </div> </div> </a> </div> </div> </div> </div> <div class="banner-place" data-place="article_under_h1" style="width: 100%;"></div> <div class="prev-next-articles"> <div class="prev-next-articles__item prev-next-articles__item--left"> <i class="fa fa-chevron-left"></i><span>№1 (x /\...</span> <a href="https://128gb.ru/uk/logicheskaya-funkciya-f-zada-tsya-vyrazheniem-logika-i-istinnye-nabory.html" rel="prev">Логіка та справжні набори</a> </div> <div class="prev-next-articles__item prev-next-articles__item--right"> <i class="fa fa-chevron-right"></i><span>Наступна стаття</span> <a href="https://128gb.ru/uk/nc-dlya-k-ot-6-do-12-fragment-algoritma-izobrazhen-v-vide-blok-shemy.html" rel="next">Фрагмент алгоритму зображено у вигляді блок-схеми</a> </div> </div> <div class="banner-place" data-place="article_above_similar_articles" style="width: 100%;"></div> <div class="banner-place" data-place="article_above_similar_articles_2" style="width: 100%;"></div> <div class="banner-place" data-place="article_under_social" style="width: 100%;"></div> <div class="banner-place" data-place="fixed_bottom_right" style="width: 100%;"></div> <div class="read-more"> <div class="read-more__title text-center">Читайте також</div> <div class="read-more__row"> <div class="row"> <div class="columns small-12 medium-6"> <div class="article-block-small row full noGutter"> <div class="columns shrink"> <div class="article-block-small__img"> <a href="https://128gb.ru/uk/cifry-ot-0-do-100-angliiskie-cifry-s-transkripciei-i-russkim.html"> <img width="130" height="85" src="/uploads/35bde34d7faf6a6a00321ba617909de0.jpg" alt="Англійські цифри з транскрипцією та російською вимовою, освіта, приклади" / loading=lazy loading=lazy> </a> </div> </div> <div class="columns"> <a class="article-block-small__link" href="https://128gb.ru/uk/cifry-ot-0-do-100-angliiskie-cifry-s-transkripciei-i-russkim.html">Англійські цифри з транскрипцією та російською вимовою, освіта, приклади</a> <div class="article-block-small__author"> <i class="fa fa-user"></i><span>2024-01-15 00:06:53</span> </div> </div> </div> </div> <div class="columns small-12 medium-6"> <div class="article-block-small row full noGutter"> <div class="columns shrink"> <div class="article-block-small__img"> <a href="https://128gb.ru/uk/sozdat-levyi-nomer-telefona-virtualnyi-nomer-telefona-dlya.html"> <img width="130" height="85" src="/uploads/a0c621961f726698ac9c573711bd18f0.jpg" alt="Віртуальний номер телефону для отримання SMS" / loading=lazy loading=lazy> </a> </div> </div> <div class="columns"> <a class="article-block-small__link" href="https://128gb.ru/uk/sozdat-levyi-nomer-telefona-virtualnyi-nomer-telefona-dlya.html">Віртуальний номер телефону для отримання SMS</a> <div class="article-block-small__author"> <i class="fa fa-user"></i><span>2024-01-15 00:06:52</span> </div> </div> </div> </div> </div> </div> <div class="read-more__row"> <div class="row"> <div class="columns small-12 medium-6"> <div class="article-block-small row full noGutter"> <div class="columns shrink"> <div class="article-block-small__img"> <a href="https://128gb.ru/uk/smartfon-alcatel-one-touch-idol-x-opisanie-harakteristiki-otzyvy-obzor-alcatel-onetouch-idol-x.html"> <img width="130" height="85" src="/uploads/8baf774b116ffb6eeccec2c49e0ab832.jpg" alt="Alcatel OneTouch Idol X: доступний кумир Інформація про тип гучномовців та аудіотехнології, що підтримуються пристроєм" / loading=lazy loading=lazy> </a> </div> </div> <div class="columns"> <a class="article-block-small__link" href="https://128gb.ru/uk/smartfon-alcatel-one-touch-idol-x-opisanie-harakteristiki-otzyvy-obzor-alcatel-onetouch-idol-x.html">Alcatel OneTouch Idol X: доступний кумир Інформація про тип гучномовців та аудіотехнології, що підтримуються пристроєм</a> <div class="article-block-small__author"> <i class="fa fa-user"></i><span>2024-01-14 00:06:13</span> </div> </div> </div> </div> <div class="columns small-12 medium-6"> <div class="article-block-small row full noGutter"> <div class="columns shrink"> <div class="article-block-small__img"> <a href="https://128gb.ru/uk/kak-naiti-poteryannyi-telefon-android-vse-sposoby-chto-takoe-imei.html"> <img width="130" height="85" src="/uploads/6fff4b690049fa36e301e568dc1ee867.jpg" alt="Що таке IMEI телефону Huawei, як його дізнатися і з його допомогою перевірити справжність пристрою" / loading=lazy loading=lazy> </a> </div> </div> <div class="columns"> <a class="article-block-small__link" href="https://128gb.ru/uk/kak-naiti-poteryannyi-telefon-android-vse-sposoby-chto-takoe-imei.html">Що таке IMEI телефону Huawei, як його дізнатися і з його допомогою перевірити справжність пристрою</a> <div class="article-block-small__author"> <i class="fa fa-user"></i><span>2024-01-14 00:06:13</span> </div> </div> </div> </div> </div> </div> <div class="read-more__row"> <div class="row"> </div> </div> <div class="read-more__row"> <div class="row"> </div> </div> </div> </div> </div> <div class="columns small-12 medium-4 show-for-medium"> <aside class="sidebar"> <div class="experts-list"> <b><div class="experts-list__title">Останні публікації</div></b><br> <div class="experts-list__item"> <div class="expert row align-middle full noGutter"> <div class="columns small-3 medium-3"> <div class="expert__img"> <img src="/uploads/ecaca126c079282431889cfa42ecd6b6.jpg" width="65" height="65" loading=lazy loading=lazy> </div> </div> <div class="columns small-9 medium-9"> <a href="https://128gb.ru/uk/planshet-dlya-zapisei-i-risovaniya-memo-pad-osnashchenie-asus-memo-pad-smart-propusknaya.html" title="Оснащення ASUS Memo Pad Smart Пропускна спроможність мережі" class="expert__name">Оснащення ASUS Memo Pad Smart Пропускна спроможність мережі</a> <div class="expert__specialty"> <a class="right-cat-link" href="https://128gb.ru/uk/category/peripherals/">Периферія</a> </div> <div class="row full noGutter"> <div class="columns shrink"> <div class="expert__rate"> </div> </div> <div class="columns"> <div class="expert__rate"> </div> </div> </div> </div> </div> </div> <div class="experts-list__item"> <div class="expert row align-middle full noGutter"> <div class="columns small-3 medium-3"> <div class="expert__img"> <img src="/uploads/bf9e1abb041ed50d3467b60b6fed72d0.jpg" width="65" height="65" loading=lazy loading=lazy> </div> </div> <div class="columns small-9 medium-9"> <a href="https://128gb.ru/uk/planshet-samsung-galaxy-tab-2-tehnicheskie-harakteristiki.html" title="⇡ Зовнішність: яким ти був, таким ти залишився" class="expert__name">⇡ Зовнішність: яким ти був, таким ти залишився</a> <div class="expert__specialty"> <a class="right-cat-link" href="https://128gb.ru/uk/category/peripherals/">Периферія</a> </div> <div class="row full noGutter"> <div class="columns shrink"> <div class="expert__rate"> </div> </div> <div class="columns"> <div class="expert__rate"> </div> </div> </div> </div> </div> </div> <div class="experts-list__item"> <div class="expert row align-middle full noGutter"> <div class="columns small-3 medium-3"> <div class="expert__img"> <img src="/uploads/138194b0fba279ad31e27e6f6ea4c340.jpg" width="65" height="65" loading=lazy loading=lazy> </div> </div> <div class="columns small-9 medium-9"> <a href="https://128gb.ru/uk/proshivka-kitaiskogo-plansheta-samsung-n8000-kitaiskie-planshety-samsung.html" title="Китайські планшети – Samsung n8000 Китайський планшет Samsung n8000 з клавіатурою" class="expert__name">Китайські планшети – Samsung n8000 Китайський планшет Samsung n8000 з клавіатурою</a> <div class="expert__specialty"> <a class="right-cat-link" href="https://128gb.ru/uk/category/work-in-the-system/">Робота в системі</a> </div> <div class="row full noGutter"> <div class="columns shrink"> <div class="expert__rate"> </div> </div> <div class="columns"> <div class="expert__rate"> </div> </div> </div> </div> </div> </div> <div class="experts-list__item"> <div class="expert row align-middle full noGutter"> <div class="columns small-3 medium-3"> <div class="expert__img"> <img src="/uploads/7376332bfa9b90885f33dcaf946b802b.jpg" width="65" height="65" loading=lazy loading=lazy> </div> </div> <div class="columns small-9 medium-9"> <a href="https://128gb.ru/uk/nomera-operatorov-i-telefony-podderzhki-bilain-bilain-kak.html" title="Як зв'язатися з оператором?" class="expert__name">Як зв'язатися з оператором?</a> <div class="expert__specialty"> <a class="right-cat-link" href="https://128gb.ru/uk/category/peripherals/">Периферія</a> </div> <div class="row full noGutter"> <div class="columns shrink"> <div class="expert__rate"> </div> </div> <div class="columns"> <div class="expert__rate"> </div> </div> </div> </div> </div> </div> <div class="experts-list__item"> <div class="expert row align-middle full noGutter"> <div class="columns small-3 medium-3"> <div class="expert__img"> <img src="/uploads/db94ee7baa569381d29540b8241aa691.jpg" width="65" height="65" loading=lazy loading=lazy> </div> </div> <div class="columns small-9 medium-9"> <a href="https://128gb.ru/uk/kak-pochistit-kompyuter-ot-kesha-i-kuki-kak-ochistit-cookies-v-raznyh.html" title="Як очистити Cookies у різних браузерах" class="expert__name">Як очистити Cookies у різних браузерах</a> <div class="expert__specialty"> <a class="right-cat-link" href="https://128gb.ru/uk/category/work-in-the-system/">Робота в системі</a> </div> <div class="row full noGutter"> <div class="columns shrink"> <div class="expert__rate"> </div> </div> <div class="columns"> <div class="expert__rate"> </div> </div> </div> </div> </div> </div> <div class="experts-list__item"> <div class="expert row align-middle full noGutter"> <div class="columns small-3 medium-3"> <div class="expert__img"> <img src="/uploads/fea734803d0194efaa1a4d5546cc0c6f.jpg" width="65" height="65" loading=lazy loading=lazy> </div> </div> <div class="columns small-9 medium-9"> <a href="https://128gb.ru/uk/fiktivnyi-nomer-telefona-dlya-registracii-besplatnyi-virtualnyi-nomer-dlya-sms.html" title="Безкоштовний віртуальний номер для смс - найкращі сервіси" class="expert__name">Безкоштовний віртуальний номер для смс - найкращі сервіси</a> <div class="expert__specialty"> <a class="right-cat-link" href="https://128gb.ru/uk/category/installing-multiple-os/">Встановлення кількох ОС</a> </div> <div class="row full noGutter"> <div class="columns shrink"> <div class="expert__rate"> </div> </div> <div class="columns"> <div class="expert__rate"> </div> </div> </div> </div> </div> </div> <div class="experts-list__item"> <div class="expert row align-middle full noGutter"> <div class="columns small-3 medium-3"> <div class="expert__img"> <img src="/uploads/ea47de498f3eb6cb88e762f542dd50c1.jpg" width="65" height="65" loading=lazy loading=lazy> </div> </div> <div class="columns small-9 medium-9"> <a href="https://128gb.ru/uk/pishet-chto-otsutstvuet-d3dx9-43-dll-oshibka-otsutstviya-d3dx9-43-dll-na.html" title="Помилка відсутності d3dx9_43" class="expert__name">Помилка відсутності d3dx9_43</a> <div class="expert__specialty"> <a class="right-cat-link" href="https://128gb.ru/uk/category/tools-to-help/">Інструменти на допомогу</a> </div> <div class="row full noGutter"> <div class="columns shrink"> <div class="expert__rate"> </div> </div> <div class="columns"> <div class="expert__rate"> </div> </div> </div> </div> </div> </div> <div class="experts-list__item"> <div class="expert row align-middle full noGutter"> <div class="columns small-3 medium-3"> <div class="expert__img"> <img src="/uploads/08d54bc5e128f9689ea10795bc75218a.jpg" width="65" height="65" loading=lazy loading=lazy> </div> </div> <div class="columns small-9 medium-9"> <a href="https://128gb.ru/uk/kak-perevernut-ekran-na-noutbuke-bystro-chto-delat-esli-perevernulos.html" title="Що робити, якщо зображення перевернулося на екрані ноутбука або комп'ютера?" class="expert__name">Що робити, якщо зображення перевернулося на екрані ноутбука або комп'ютера?</a> <div class="expert__specialty"> <a class="right-cat-link" href="https://128gb.ru/uk/category/solving-problems/">Вирішення проблем</a> </div> <div class="row full noGutter"> <div class="columns shrink"> <div class="expert__rate"> </div> </div> <div class="columns"> <div class="expert__rate"> </div> </div> </div> </div> </div> </div> <div class="experts-list__item"> <div class="expert row align-middle full noGutter"> <div class="columns small-3 medium-3"> <div class="expert__img"> <img src="/uploads/1d6f80d0853894c662ad547d7aaeecf6.jpg" width="65" height="65" loading=lazy loading=lazy> </div> </div> <div class="columns small-9 medium-9"> <a href="https://128gb.ru/uk/pochemu-ne-poluchaetsya-udalit-setevoi-printer-v-windows-kak-udalit.html" title="Як видалити принтер простий спосіб видалення Як видалити всі драйвера принтера hp" class="expert__name">Як видалити принтер простий спосіб видалення Як видалити всі драйвера принтера hp</a> <div class="expert__specialty"> <a class="right-cat-link" href="https://128gb.ru/uk/category/installing-multiple-os/">Встановлення кількох ОС</a> </div> <div class="row full noGutter"> <div class="columns shrink"> <div class="expert__rate"> </div> </div> <div class="columns"> <div class="expert__rate"> </div> </div> </div> </div> </div> </div> <div class="experts-list__item"> <div class="expert row align-middle full noGutter"> <div class="columns small-3 medium-3"> <div class="expert__img"> <img src="/uploads/7072c628d5eb0a69901bc74c30ec70da.jpg" width="65" height="65" loading=lazy loading=lazy> </div> </div> <div class="columns small-9 medium-9"> <a href="https://128gb.ru/uk/kak-podklyuchit-router-samomu-poshagovaya-instrukciya-nastroika.html" title="Налаштування wi-fi на ноутбуці Підключення роутера до мережі Інтернет" class="expert__name">Налаштування wi-fi на ноутбуці Підключення роутера до мережі Інтернет</a> <div class="expert__specialty"> <a class="right-cat-link" href="https://128gb.ru/uk/category/peripherals/">Периферія</a> </div> <div class="row full noGutter"> <div class="columns shrink"> <div class="expert__rate"> </div> </div> <div class="columns"> <div class="expert__rate"> </div> </div> </div> </div> </div> </div> </div> <div> <div id="komojy1" style="height:500px;width:300px;" align="center"></div> </div> </aside> </div> </div> </main> </div> </div> </div> <footer class="footer"> <div class="footer-menu"> <a href="https://128gb.ru/uk/feedback.html" title="" class="footer-menu__item">Контакти</a> <a href="" title="" class="footer-menu__item">Про проект</a> <a href="https://128gb.ru/uk/feedback.html" title="" class="footer-menu__item">Реклама</a> </div> <div class="footer-bottom"> <div class="footer-bottom__wrapper"> <div class="footer-bottom__block"> <div class="footer__logo"> </div> <div class="footer__copyright" style="max-width:500px;">© 2024. Комп'ютерна допомога <br> <small></small> </div> </div> <div class="footer-submenu"> <div class="footer-submenu__column"> <a class="footer-submenu__item" data-key="aHR0cDovL3NvdmV0cy5uZXQvYWJvdXQ=" data-type="href" href="https://128gb.ru/uk/category/useful-tips/">Корисні поради</a> </div> <div class="footer-submenu__column"> <a class="footer-submenu__item" data-key="aHR0cDovL3NvdmV0cy5uZXQvYWJvdXQ=" data-type="href" href="https://128gb.ru/uk/category/solving-problems/">Вирішення проблем</a> </div> <div class="footer-submenu__column"> <a class="footer-submenu__item" data-key="aHR0cDovL3NvdmV0cy5uZXQvYWJvdXQ=" data-type="href" href="https://128gb.ru/uk/category/iron/">Залізо</a> </div> <div class="footer-submenu__column"> </div> </div> <div class="footer-social"> </div> </div> </div> </footer> <script type="text/javascript" src="//vk.com/js/api/openapi.js?124"></script> <script> var BANNERS = { types: { code: 1, consultant: 6, modal: 9, offer: 7 } } </script> <script type="text/javascript" src="https://128gb.ru/wp-content/themes/womensovet/assets/js/app-20170207142519.js"> </script> <script type="text/javascript"> /*<![CDATA[*/ window.hashName = window.location.hash; if (window.hashName) { $(window).load(function () { $('html, body').animate({ scrollTop: $(window.hashName).offset().top} , 2000); return false; } ); } jQuery(function($) { $(document).foundation(); APP.init(); getVkSharedCount(); getFaceBookShareCount(); getOKShareCount(); } ); /*]]>*/ </script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=4.8.3'></script> <div class="li-stat"> </div> <!-- SAPE RTB JS --> <script async="async" src="https://cdn-rtb.sape.ru/teasers/js/291/2/92291.js" type="text/javascript"> </script> <!-- SAPE RTB END --><br> <br> </body> </html>