Прехвърляне към съдържание


Снимка

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


  • Моля, влезте, за да отговорите
18 отговора по тази тема

#1 Crio

Crio

    Knowledge is Power

  • Глобални модератори
  • ПипПипПипПипПипПип
  • 457 мнения
  • Пол:Мъж

Публикувано: 16 July 2007 - 20:35

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 в кода.

&lt;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:

I believe in a world I can and do understand. A rational universe, explained through rational means.


#2 kiril

kiril

    Потребител

  • Потребители
  • ПипПипПипПипПипПип
  • 1 мнения

Публикувано: 03 October 2007 - 08:18

Незнам дали тук е правилното място :) извинявам се ако не е така ;)
Ползвам малко vbscript за разни задачки по обслужване на компютрите в мрежата ни.
Искам да попитам, дали сте правили графика по данни чрез vbscript?
Целта ми е да визуализирам разни неща под формата на графика.
Преди време попаднах на един скрипт който генерира svg, но се указа че с IE на Vista има проблеми ... а и с Firefоx също.

#3 Crio

Crio

    Knowledge is Power

  • Глобални модератори
  • ПипПипПипПипПипПип
  • 457 мнения
  • Пол:Мъж

Публикувано: 03 October 2007 - 15:47

Тъй като VBScript може да ползва ActiveX компоненти, ще е нищо работа да се направи подобен скрипт... при наличието на добър ActiveX контрол :)

I believe in a world I can and do understand. A rational universe, explained through rational means.


#4 x7azy

x7azy

    Потребител

  • Потребители
  • ПипПипПипПипПипПип
  • 10 мнения
  • Пол:Мъж

Публикувано: 15 December 2007 - 15:35

Много е яко :) благодаря.Заинтересуван съм от VBS скриптирането почвам да го разучавам.

БЛАГОДАРЯ :svlove: :peace:

Винаги Готов да се учи.

X7AZY


#5 Sashko

Sashko

    Потребител

  • Потребители
  • ПипПипПипПипПипПип
  • 27 мнения
  • Пол:Мъж

Публикувано: 06 January 2009 - 18:25

Правя всичко както си е в началото,но когато влвлезна в първия фаил ми изписва

Прикрепено(и) умалено(и) изображение(я)

  • B00000001.jpg


#6 l.kanelov

l.kanelov

    /arch:AVX2

  • Глобални модератори
  • ПипПипПипПипПипПип
  • 1606 мнения
  • Пол:Мъж

Публикувано: 06 January 2009 - 18:27

Правя всичко както си е в началото,но когато влвлезна в първия фаил ми изписва


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

#7 Sashko

Sashko

    Потребител

  • Потребители
  • ПипПипПипПипПипПип
  • 27 мнения
  • Пол:Мъж

Публикувано: 06 January 2009 - 19:37

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


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

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

Прикрепено(и) умалено(и) изображение(я)

  • B00000003.jpg


#8 l.kanelov

l.kanelov

    /arch:AVX2

  • Глобални модератори
  • ПипПипПипПипПипПип
  • 1606 мнения
  • Пол:Мъж

Публикувано: 06 January 2009 - 19:49

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

#9 Sashko

Sashko

    Потребител

  • Потребители
  • ПипПипПипПипПипПип
  • 27 мнения
  • Пол:Мъж

Публикувано: 06 January 2009 - 20:16

А ти да нямаш в предвид,че на някои от местата трябва да си го пиша според моите изисквания на моя компютър.

B00000004.jpg

#10 l.kanelov

l.kanelov

    /arch:AVX2

  • Глобални модератори
  • ПипПипПипПипПипПип
  • 1606 мнения
  • Пол:Мъж

Публикувано: 06 January 2009 - 20:35

Не, оказа се, че колегата 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 в този примерен скрипт.

#11 Sashko

Sashko

    Потребител

  • Потребители
  • ПипПипПипПипПипПип
  • 27 мнения
  • Пол:Мъж

Публикувано: 06 January 2009 - 21:29

Да, в това беше проблема. Мерси за помощта.

#12 Sashko

Sashko

    Потребител

  • Потребители
  • ПипПипПипПипПипПип
  • 27 мнения
  • Пол:Мъж

Публикувано: 09 January 2009 - 17:13

А защо не ми стават тези с "Dim",във 2. подточка б)?

#13 l.kanelov

l.kanelov

    /arch:AVX2

  • Глобални модератори
  • ПипПипПипПипПипПип
  • 1606 мнения
  • Пол:Мъж

Публикувано: 09 January 2009 - 17:47

А защо не ми стават тези с "Dim",във 2. подточка б)?


Бих искал да те помоля да си формулираш ясно въпроса.

#14 Sashko

Sashko

    Потребител

  • Потребители
  • ПипПипПипПипПипПип
  • 27 мнения
  • Пол:Мъж

Публикувано: 10 January 2009 - 12:06

Бих искал да те помоля да си формулираш ясно въпроса.


Добре!Защо не работят примерите от ВТОРА ТОЧКА/ПОДТОЧКА Б?

#15 Crio

Crio

    Knowledge is Power

  • Глобални модератори
  • ПипПипПипПипПипПип
  • 457 мнения
  • Пол:Мъж

Публикувано: 10 January 2009 - 13:45

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

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

I believe in a world I can and do understand. A rational universe, explained through rational means.





0 потребители четат тази тема

0 регистрирани потребители, 0 гости и 0 анонимни потребители