Jump to content

VBScript за начинаещи


Препоръчан пост

1. Какво е VBScript

 

VBScript е съкращението на Visual Basic Scripting Edition. Това е скриптов език разработван от Microsoft който е вариант на техния Visual Basic език за програмиране. По подразбиране той е инсталиран във всеки Windows от Windows 98 насам. Когато VBScript е използван в Microsoft Internet Explorer, вграден в някой уеб документ той много прилича (по функционалност) на JavaScript. Тъй като другите браузър-и като Opera и Mozilla Firefox нямат вградена поддръжка на VBScript повечето уеб разработчици използват JavaScript (JScript в Internet Explorer). Като оставим уеб перспективите пред VBScript , чрез него лесно могат да бъдат създавани програмки които да се изпълняват на потребителският компютър. В тази статия аз ще ви покажа как лесно се правят такъв тип програмки, или така наречените HTML Applications (*.hta). Но първо мисля да ви обясня най-важните неща за VBScript.

 

2. Въведение в VBScript

 

а) Hello, VBScript!

 

Да започнем с класическото "Hello, World!" :

 

MsgBox("Hello, World!")

Сега запазете кода в файл с окончание ".vbs" и стартирайте файлът.

 

б)Променливи

 

Променливите се използват за да можете да пазите нужната ви информация в тях. Те могат да бъдат използвани за взимането на информацията запазена в тях,

 

или за променянето и. В VBScript всички променливи са от типа "Вариант" и могат да съдържат всякакъв вид информация.

 

Правила за променливите :

* Могат да започват само с буква!

* Имената могат да съдържат само числа и букви!

* Името им неможе да бъде по дълго от 255 знака!

 

Променливите в VBScript се декларират чрез запазените думи Dim, Public, Private ... например:

 

Dim var

Присвояването на стойност към променлива става посредством знака за равенство "=" ... например:

 

name = "Milen"
i = 1

Масиви

 

Когато искате да запазите повече от една стойност в една променлива вие лесно може да използвате масив. Масивът се декларира като след името на

 

променливата добавите броят на елементите които съдържа затворени в скоби... например :

 

Dim city(3)
city(0) = "New York"
city(1) = "London"
city(2) = "Paris"
city(3) = "Tokyo"

Горният код декларира масив с четири елемента. Четири са защото всеки масив започва от нула, а не от едно.

 

Можете да създавате и масиви с повече от един масив в тях, добавяте още като като ги разделяте с запетаи... например:

 

Dim MorskiShah(2,2)

Това прави масив с 3 редици с по 3 елемента .. или таблица за морски шах :P

 

в)Условия

 

Често когато пишем код ни се налага да взимаме различни решения. Затова използваме условните изрази.

Във VBScript използваме следните знаци :

 

Правопис:

If <условие> Then
<код>
End if

Пример:

If a=1 Then
Msgbox("A equals 1")
End if

Този код проверява дали стойноста на променливата "а" е равна на 1...

 

Друг оператор който използваме е оператора else, кодът след него бива изпълняван само ако предните условия не са верни.

 

Правопис:

If <условие> Then
<код>
Else
<код>
End if

Пример:

If a = 1 Then
Msgbox("A equals 1")
Else
Msgbox("A is different from 1")
End If

Кодът след else ще бъде изпълнен само ако стойноста на променливата "a" е различна от 1.

 

Друг много полезен оператор е ElseIf, когато искате да изберете една от много възможности.

 

Правопис:

If <условие> Then
<код>
ElseIf <условие>Then
<код>
Else
<код>
End if

Пример:

If a = 1 Then
Msgbox("A equals 1")
Elseif a = 2 then
Msgbox("A equals 2")
Else
Msgbox("A is different from 1 and 2")
End If

Бележка: Можете да имате колкото искате Elseif оператора, но ако броят им е доста голям е по удобно да използвате следващия оператор (поне според мен).

 

Правопис:

Select Case <променлива>
Case <стойност>:
<код>
Case <стойност>:
<код>
Case Else:
<код>
End Select

Пример:

 

Select Case Name
Case "Milen":
Msgbox("Your Name is Milen")
Case "Todor":
Msgbox("Your Name is Todor")
Case Else:
Msgbox("I've never seen you before")
End Select

Надявам се условните оператори да са ви станали ясни.

 

г) Цикли

 

Често когато пишете програма ви се налага част от кодът ви да се изпълни няколко пъти. Естествено можете да го копирате желания брой пъти, но всепак това е

 

доста неудобно. Затова използваме цикличните оператори. В VBScript те са 3:

 

* Операторът For...Next - изпълнява кода определен брой пъти

* Операторът For Each...Next - Изпълнява кода за всеки обект в дадена колекция такива, или за всеки елемент от масив.

* Do While/Until...Loop statement - Кодът се повтаря докато дадено условие е вярно, или докато то не стане вярно (Чрез While).

* Също така можете да използвате While...Wend но той не е препоръчителен за използване, затова няма да го включвам в обясненията.

 

For...Next

Този оператор се използва когато искате кодът ви да се изпълнява определен от вас брой пъти.

 

Правопис:

For <променлива> = <стойност> to <стойност>
<код>
Next

Пример:

For a = 1 to 10
b = b + a
Next

Този код добавя всяка нова стойност на "а" към "b".

 

For Each...Next

Изпълнява кода за всеки обект в дадена колекция такива, или за всеки елемент от масив.

 

Правопис:

For Each <променлива> in <масив>
<код>
Next

Пример:

Dim Name
Dim Friends(2)
Friends(0) = "VBScript"
Friends(1) = "Crio"
Friends(2) = "God"

For Each Name in Friends()
MsgBox("I have a friend named " & Name)
Next

Do...Loop

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

 

или докато не стане вярно.

Повтаряне на кода докато той е верен

Тогава използваме "Do While...Loop"

 

Правопис:

Do While <условие>
  <код>
Loop

Пример:

Dim i
i = 1
Do While i < 10
Msgbox("i is smaller than 10")
i = i + 1
Loop
MsgBox("i equals to 10...")

Този код проверява дали променливата "i" e по-малка от 10, ако е по-малка кодът съобщава за това и я увеличава с 1. Ако променливата е равна на 10 кодът

 

съобщава за това.

 

Повтаряне на кода докато той не стане верен

Тогава използваме "Do Until...Loop"

 

Правопис:

При този вариант ако условието не е вярно кодът в цикъл-а никога няма да бъде изпълнен:

Do Until <условие>
<код>
Loop

При този вариант кодът бива изпълнен поне един път докато бъде проверена верноста на условието:

Do
<код>
Loop Until <условие>

Примери:

Do Until a = 10
Msgbox(a)
a = a + 1
Loop

a = 10
Do
Msgbox("A isn't equal to 10")
Loop Until a = 10
Msgbox("A equals 10")

Излизане от Do Цикъл:

 

Пример:

Do Until a = 100
a = a + 1
If a = 10 Exit Do
Loop

Е .. това е най-важното според мен. Всичко друго се учи с времето.

 

3. Примерни Скриптове

 

а) Прост Скрипт:

В скрипта се използват:

InputBox - Това е диалог в който се въвежда текст който използваме в скрипта си.

' - с този знак се започва коментар

Dim FirstName,SecondName,ThirdName
FirstName = InputBox("What is your first name?")
SecondName = InputBox("What is your second name?")
ThirdName = InputBox("What is your third name?")
MsgBox(FirstName & " " & SecondName & " " & ThirdName)

б) Скрипт

Прост скрипт който проверява написан линк и казва какъв тип е той.

В скрипта се използват:

Left() - оператор който проверява дали даден брой букви от избран текст съвпадат с желаните от вас.

Dim link
link = Inputbox("Please input a url")
if left(link,7) = "http://" then
Msgbox("HyperText Transfer Protocol")
elseif(link,6) = "ftp://" then
MsgBox("File Transfer Protocol")
else
MsgBox("Unknown Protocol")
end if

в) Скрипт за напреднали

Сваляне на клипче от ZAZZ.BG (до скоро познат като vbox7.com)

Dim link,tmp,flv
link = InputBox("Моля напишете линк от ZAZZ.BG")
If left(link,20) = "http://zazz.bg/play:" and len(link) >= 28 or left(link,24) = "http://www.zazz.bg/play:" and len(link) >= 32 then
tmp = Mid(link,instr(link,"play:")+5,8)
flv = "http://media.zazz.bg/s/" & left(tmp,2) & "/" & tmp & ".flv"
MsgBox("Линкът към flv файлът е " & flv)
else
MsgBox("Невалиден Линк"
end if

4.HTML Application

Това вече е истинско програмиране, комбинирано с HTML+CSS.

Сега ще ви покажа как да напишете програма която да ви показва кои програми се стартирват автоматично при пускането на компютъра ви.

Нека започнем.

 

Отворете Notepad.exe.

 

Ето началото на програмата.. чист HTML и малко CSS...

<html>
<head>
<title>Crio</title>
<style>
td{border-style: none;}
table{border-style:none;background-color:#FFFFFF}
tr.top{color:#FFFFFF;background-color:#444444;}
tr.content{color:#222222;background-color:#999999;}
</style>
</head>
<body bgcolor="#00" text="#AAAAAA">

Сега нека включим и vbscript-a в кода.

 

<script type="text/vbscript">

Нека сега добавим няколко константи за регистрите.

Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_CONFIG = &H80000005
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_USERS = &H80000003

Същност на нас ще ни трябвa само HKEY_LOCAL_MACHINE но и другите биха ви били полезни,ако решите да правите подобна програмка.

 

Нека декларираме променливите които ще използваме:

Dim Computer,KeyPath,val,Reg,ValueNames,ValueTypes

Сега да присвоим името на компютър-а с чиито регистри ще боравим, "." е нашият компютър:

Computer = "."

Сега да присвоим пътя в регистрите от който ще намерим обектите които се стартират.

KeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"

Сега да създадем обекта чрез който ще вземем броя и имената на стойностите в ключа (KeyPath) от регистрите, и самите стойности...

Set Reg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & Computer & "\root\default:StdRegProv")

А сега да вземем броя и имената на стойностите..

Reg.EnumValues HKEY_LOCAL_MACHINE, KeyPath, ValueNames, ValueTypes

Сега трябва да добавим малко HTML код за да има програмката приятна Визия...

document.write("<b>Registry Startup</b>:")
document.write("<table border=1><tr align=center class=top><td>Име</td><td width=100>Тип</td><td>Стойност</td></tr>")

Сега да отворим един цикъл и да обходим всяка стойност от дадения "ключ" :

For i=0 To UBound(ValueNames)

Сега нека добавим още малко HTML код:

document.write("<tr class=content>")
document.write("<td align=center>" & ValueNames(i) & "</td>")

Сега нека вземем стойностите :

Reg.GetStringValue HKEY_LOCAL_MACHINE,KeyPath,valueNames(i),val

Сега още малко HTML код заедно с стойностите и краят на цикъла:

 

document.write("<td>" & val & "</td>")
document.Write("</tr>")
Next
document.write("</table>")

И сега да вземем всички програми които се стартират от папката "Startup"

 

Малко HTML:

document.write("<center><b>Normal Startup:</b>")
document.write("<table border=1><tr align=center class=top><td>Име</td></tr>")

Сега нека създадем обекта чрез който ще вземем файловете от папката.

Set Shell = CreateObject("Shell.Application")

Да присвоим на една променлива пътят към папката.

Set Folder = Shell.Namespace(&H7&)

A сега да присвоим на друга променлива файловете в папката.

Set Items = Folder.Items

Нека сега с един цикъл да обходим файловете и ги запишем.

For Each FolderItem in Items
document.write("<tr class=content><td>" & FolderItem.Name & "</td></tr>")
Next

Сега да завършим HTML кода както и програмката.

document.write("</table>")
document.write("<p align=center>Автор : Милен Иванов (Crio)<br/><a href='http://www.softvisia.com'>www.SoftVisia.com</a></center>")
</script>
</html>

Сега запазете файлът с разширение ".hta" и го пуснете...

 

Надявам се да съм ви бил полезен :peace:

Link to comment
Сподели другаде

  • 2 months later...

Незнам дали тук е правилното място :) извинявам се ако не е така ;)

Ползвам малко vbscript за разни задачки по обслужване на компютрите в мрежата ни.

Искам да попитам, дали сте правили графика по данни чрез vbscript?

Целта ми е да визуализирам разни неща под формата на графика.

Преди време попаднах на един скрипт който генерира svg, но се указа че с IE на Vista има проблеми ... а и с Firefоx също.

Link to comment
Сподели другаде

  • 2 months later...
  • 1 year later...
Правя всичко както си е в началото,но когато влвлезна в първия фаил ми изписва

 

Ами то това е целта на занятието в първия пример. Програмката "Hello World!" е традиция в програмирането и има за цел да демонстрира създаването и стартирането на най-простото приложение на даден език за програмиране. В случая се използва функцията MsgBox (показване на изходна информация) за извеждане на низа "Здравей, Свят!" в диалогов прозорец, който поздравява потребителя.

Link to comment
Сподели другаде

Ами то това е целта на занятието в първия пример. Програмката "Hello World!" е традиция в програмирането и има за цел да демонстрира създаването и стартирането на най-простото приложение на даден език за програмиране. В случая се използва функцията MsgBox (показване на изходна информация) за извеждане на низа "Здравей, Свят!" в диалогов прозорец, който поздравява потребителя.

 

ДА!Прави сте,ама кой да се сети?Пиша глупости преди да съм помислил :crosseyes1: .ИЗВИНЯВАМ СЕ!!!.

 

А всекпример работи нали? Защото на мен ми излиза това кога пиша някои от примерите?(ПРОИЗВОЛЕН ПРИМЕР)

post-7918-1231263449_thumb.jpg

Link to comment
Сподели другаде

Разбира се, че работят. Провери си синтаксиса, защото някъде си сложил ")" в повече или пък си пропуснал. Ако мислиш, че ще ти е по-лесно пусни кода в коментара си.
Link to comment
Сподели другаде

Не, оказа се, че колегата Crio е пропуснал left в проверката, която проверява дали въведеният URL е от типа File Transfer Protocol. За целта просто трябва да добавиш едно left пред (link,6) и скриптът ще заработи. Т.е. ще изглежда така:

 

Dim link
link = Inputbox("Please input a url")
if left(link,7) = "http://" then
Msgbox("HyperText Transfer Protocol")
elseif left(link,6) = "ftp://" then
MsgBox("File Transfer Protocol")
else
MsgBox("Unknown Protocol")
end if

 

Left() функцията връща определен брой символи от лявата страна на низа. В първия случай 7, а във втория 6. Низът се съхранява в променливата Link в този примерен скрипт.

Link to comment
Сподели другаде

Не виждам какво очакваш да видиш като потвърждение, че работи. Единствения знак, че НЕ работи този код, ще е съобщение за грешка. В противен случай всичко е добре.

 

Тази точка (2) като цяло има за цел да покаже как работят запазените думи в VBScript т.е. да покаже правописа им. Така, че примерите са по-скоро показни.

Link to comment
Сподели другаде

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гост
Отговори на тази тема

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   Не можете да качите директно снимка. Качете или добавете изображението от линк (URL)

Loading...
×
×
  • Създай ново...