W poprzednim odcinku naszego kursu zaprezentowaliśmy Windows Script Host – wbudowany w system Windows mechanizm interpretujący skrypty. Pokazaliśmy także, jakich narzędzi programistycznych – linii komend i zwykłego Notatnika Windows – może używać początkujący skrypter (pierwszy odcinek kursu znajdziesz w wersji elektronicznej na płycie dołączonej do bieżącego wydania PC Formatu). Tym razem na początek proponujemy niewielką zmianę. Dla wygody pisania skryptów warto zamienić systemowy Notatnik na program Notepad++ 4.1.2., który zamieszczamy na naszym CD.
Pierwszy prosty skrypt powinieneś mieć już za sobą. Wiesz również, jaka powinna być struktura skryptu, ale ów pierwszy skrypt był na tyle prosty, że nie znalazło się w nim miejsce na wszystkie odpowiednie elementy struktury. Teraz to zmienimy. Zajmiemy się tworzeniem pełnowartościowego skryptu VBScript, za którego pomocą będziesz mógł odczytywać wartości z rejestru Windows. Do tego celu posłużysz się zestawem zmiennych.
Zmienne w skrypcie
Czym są zmienne? W kontekście programowania są one czymś w rodzaju skrótów odwołujących się do fragmentu pamięci komputera, w którym są przechowywane informacje potrzebne programowi i zmieniane w trakcie działania skryptu. Aby skorzystać ze zmiennej w skrypcie, wystarczy ją zadeklarować.
Zmienne VBScript i typy danych
W językach programowania rozróżnia się typy zmiennych. Ich podział może być różny w zależności od tego, czy zmienne dzielimy ze względu na zakres ważności (widoczności zmiennej w kodzie programu; np. zmienna lokalna lub zmienna globalna), ze względu na sposób ich inicjowania (wypełnienia fragmentu pamięci odpowiednią wartością; zmienna statyczna lub dynamiczna), czy ze względu na typ danych, jakie reprezentują. W zależności od języka programowania rozróżnia się wiele typów danych. Język VBScript dopuszcza tylko jeden typ – Variant. Typ ten może przechowywać wiele różnych rodzajów informacji (liczby całkowite, tekst itd.). Tym samym funkcje VBScript zwracają także jeden typ danych – właśnie Variant. W jaki sposób jeden typ danych przekłada się na różnego typu informacje przechowywane w zmiennych bądź zwracane przez funkcje skryptu? Otóż typ Variant zawiera szereg podtypów, ale na obecnym etapie naszego kursu nie będziemy się nimi jeszcze zajmować.
Nagłówek skryptu i deklaracja zmiennych
Na pierwszym etapie tworzenia skryptu powstaje nagłówek skryptu. Co prawda nie jest on niezbędny do działania skryptu (przynajmniej w większości wypadków), ale warto, by każdy tworzony skrypt zawierał nagłówek. Nagłówek czyni cały skrypt czytelniejszym, gdyż od razu widać, jakie zmienne są w skrypcie zadeklarowane, a także, w jaki sposób skrypt jest uruchamiany.
Uruchom program Notepad++ i wpisz listing 1 lub z naszego krążka dołączonego do bieżącego wydania wczytaj plik kurs_skrypt02.vbs.
Wiersze od 1 do 5 to właśnie nagłówek (ang. header) skryptu. Mimo pozornej komplikacji tak naprawdę zawarte są tutaj tylko trzy polecenia.
Pierwszy wiersz zaprezentowanego listingu 1 zawiera wyrażenie, które informuje skrypt, że ma uznawać za zmienne tylko takie wyrażenia, które zostały wcześniej zadeklarowane. Użycie wyrażenia Option Explicit w nagłówku nie jest konieczne, ale gdyby zostało pominięte, wtedy interpreter VBScriptu podczas wykonywania kolejnych linii skryptu uznawałby za zmienną każde wyrażenie, którego nie rozumie, tzn. które nie jest poleceniem języka VBScript.
Kolejny wiersz 2 to przykład wyrażenia umieszczanego w nagłówku skryptu, sterującego jego wykonaniem. W tym konkretnym przypadku wyrażenie On Error Resume Next informuje komputer, jak ma postąpić, gdy podczas wykonania skryptu napotka jakikolwiek błąd. Jeśli tak się zdarzy, błędna linia zostanie zignorowana, a skrypt będzie uruchamiany dalej od kolejnej linii. Tego typu praktyka jest określana mianem obsługi błędów (ang. error handling). Inna sprawa, że w przypadku, gdy dopiero tworzysz skrypt, zalecanym rozwiązaniem jest niewpisywanie tego wyrażenia, gdyż „ukrywa” ono możliwe błędy, jakie mogą się pojawić podczas działania skryptu. Zwrot On Error Resume Next należy umieszczać w nagłówku dopiero wtedy, kiedy skrypt jest już ukończony i poprawnie działa.
Następne trzy wiersze (od 3 do 5) to deklaracje zmiennych. Zauważ, że instrukcją informującą komputer o tym, że ma do czynienia ze zmienną, jest Dim. Nazwy zmiennych mogą być dowolne. Jednak w celu zapewnienia czytelności warto wpisywać nazwy odzwierciedlające dane, które mają być reprezentowane przez te zmienne. W naszym skrypcie nazwy zmiennych są po prostu nazwami kluczy rejestru, z których będziesz za pomocą skryptu odczytywał dane. Wyjątkiem jest zmienna o nazwie ShellObject, którą zadeklarowano w celu późniejszego jej wykorzystania do utworzenia obiektu, za którego pośrednictwem odczytasz wybrane klucze rejestru. Deklaracje zmiennych kończą część nagłówkową skryptu.