Всем привет, с вами автор блога scriptcoding.ru. В этой статье мы рассмотрим примеры скиптов сервера Windows Script Host под названием «Электронные часы».
Фактически, мы напишем два примера скриптов, один на языке vbscript, а другой на языке jscript. Чтобы не мучиться с копированием кода с сайта, вы сможете скачать архив со всеми принадлежностями по ссылке ниже. Задача довольно проста: будет выводиться форма, на которой должны отображаться электронные часы, а именно, число часов, минут и секунд. Предварительно я подготовил в Фотошопе 10 рисунков в формате gif, они содержат цифровые значения от 0 до 9.
Скрипт часов – начинаем программировать

Ну что же, давайте приступим, сначала я покажу код на языке vbscript, подробно проанализирую его, а уже потом рассмотрим программный пример на языке jscript.

Примеры скриптов — программный код на языке VBSCRIPT :
'********************************************************* ' примеры скриптов ' скрипт - электронные часы ' script_chasy.vbs '********************************************************* Option Explicit ' объявляем переменные dim WSO, WshShell, f, t dim c0,c1,c2,c3,c4,c5,c6,c7,c8,c9, gif_arr ' создаем ссылку на объект WindowSystemObject set WSO = WScript.CreateObject("Scripting.WindowSystemObject") ' создаем ссылку на объект WScript.Shell set WshShell = WScript.CreateObject("WScript.Shell") ' создаем форму set f = WSO.CreateForm(0,0,0,0) With f ' ширина .ClientWidth = 600 ' высота .ClientHeight = 120 ' центрируем .CenterControl() ' заголовок окна - скрипт часов .Text = "Скрипт 'Часы'" End With '************************************************************************** ' загружаем изображения '************************************************************************** With WSO set c0 = .LoadImage(WshShell.CurrentDirectory & "\\c0.gif") set c1 = .LoadImage(WshShell.CurrentDirectory & "\\c1.gif") set c2 = .LoadImage(WshShell.CurrentDirectory & "\\c2.gif") set c3 = .LoadImage(WshShell.CurrentDirectory & "\\c3.gif") set c4 = .LoadImage(WshShell.CurrentDirectory & "\\c4.gif") set c5 = .LoadImage(WshShell.CurrentDirectory & "\\c5.gif") set c6 = .LoadImage(WshShell.CurrentDirectory & "\\c6.gif") set c7 = .LoadImage(WshShell.CurrentDirectory & "\\c7.gif") set c8 = .LoadImage(WshShell.CurrentDirectory & "\\c8.gif") set c9 = .LoadImage(WshShell.CurrentDirectory & "\\c9.gif") End With '************************************************************************** ' формируем массив gif_arr = Array(c0,c1,c2,c3,c4,c5,c6,c7,c8,c9) ' включаем таймер set t = WSO.CreateTimer() With t ' вызов функции get_time .OnExecute = getref("get_time") ' задаем интервал в 100 мс .Interval = 100 ' активируем .Active = true End With '************************************************************************** ' функция обработки времени '************************************************************************** скрипт часов function get_time(sender) dim cur_time, my_arr, cur_hour, cur_min, cur_sec ' определяем текущее время cur_time = time ' число часов cur_hour = hour(cur_time) ' число минут cur_min = minute(cur_time) ' число секунд cur_sec = second(cur_time) '**************************************************** ' вызываем трижды процедуру time_index call time_index(cur_hour, 0) call time_index(cur_min, 1) call time_index(cur_sec, 2) '**************************************************** end function '************************************************************************** ' процедура вывода изображений '************************************************************************** примеры скриптов sub time_index(get_index, get_pos) dim mod_res, int_res if get_index<=9 then f.DrawImage 0 + get_pos*200,0,0,0,c0 f.DrawImage 90 + get_pos*200,0,0,0,gif_arr(get_index) else mod_res = get_index mod 10 int_res = (get_index-mod_res)/10 f.DrawImage 0 + get_pos*200,0,0,0,gif_arr(int_res) f.DrawImage 90 + get_pos*200,0,0,0,gif_arr(mod_res) end if end sub '************************************************************************** f.Show() WSO.Run() |
Работа данного примера скрипта основывается на компоненте WindowSystemObject (подробней о нем смотрите статью «Создаем оконный интерфейс с помощью WindowSystemObject«). А теперь давайте проанализируем каждую строчку:
- Option Explicit – тут мы включаем проверку переменных.
- dim WSO, WshShell, f, t – блок переменных, объявленных с помощью ключевого слова dim. WSO– хранит ссылку на объект WindowSystemObject, WshShell– хранит ссылку на объект WScript.Shell, f– через эту переменную происходит доступ к параметрам формы, t– отвечает за работу таймера. Скрипт часов.
- dim c0,c1,c2,c3,c4,c5,c6,c7,c8,c9, gif_arr – переменные от c0 до c9 хранят доступ к изображениям, gif_arr – это массив, который хранит в себе переменные c0 … c9, зачем это нужно, вы увидите потом.
- set WSO = WScript.CreateObject(«Scripting.WindowSystemObject») – Тут мы создаем ссылку на экземпляр класса WindowSystemObject.
- set WshShell = WScript.CreateObject(«WScript.Shell») – Создается ссылка на экземпляр класса WScript.Shell, это нужно для того, что бы дальше определить путь к текущему каталогу (место, откуда произошел запуск сценария). Примеры скриптов.
- set f = WSO.CreateForm(0,0,0,0) – Происходит создание формы (метод CreateForm), все четыре параметра ровны нулю, они определяют отступы и размер формы.
- f.ClientWidth = 600 – Через свойство ClientWidth задаем ширину формы.
- f.ClientHeight = 120 – Используя свойство ClientHeight, прописываем значение высоты.
- f.CenterControl() – Центрируем, то есть, при запуске сценария, его клиентская область будет по центру экрана.
- f.Text = «Скрипт ‘Часы'» – Тут мы через свойство Text прописали название формы скрипта «Часы».
Далее происходит загрузка изображений:
set c0 = WSO.LoadImage(WshShell.CurrentDirectory & «\c0.gif»)
…
set c0 = WSO.LoadImage(WshShell.CurrentDirectory & «\c9.gif»)
За загрузку изображений отвечает метод LoadImage, в качестве параметры мы должны передать полный путь к рисунку. Рисунки должны находиться в одной папке со скриптом, тут мы видим, что путь к текущему каталогу определяется с помощью выражения WshShell.CurrentDirectory (смотрите статью «Объект WScript.Shell — метод ExpandEnvironmentStrings и свойство CurrentDirectory«). Метод LoadImage вернет ссылку на объект, которая хранится в соответствующей переменной, класс отвечает за работу с загруженным изображением (позиция, размер и так далее).
- gif_arr = Array(c0,c1,c2,c3,c4,c5,c6,c7,c8,c9) – тут происходит создание массива (работу с массивами vbscript я рассмотрел в статье «Урок 9 по VBScript: Массивы«).
- set t = WSO.CreateTimer() – с помощью метода CreateTimerмы получаем доступ к объекту Timer. Таймер нам нужен для того, что бы сценарий периодически проверял значение часов, минут и секунд.
- t.OnExecute = getref(«get_time») – тут происходит вызов пользовательской функции get_time посредством обработчика событий. Видим, что обработчик событий наследует объект CreateTimer (переменная t). Примеры скриптов.
Далее происходит назначение интервала в миллисекундах, и активация таймера, то есть, каждые 100 миллисекунд будет происходить вызов пользовательской функции get_time. Стоит учитывать, что если система загружена, то произойдет запаздывание.
- function get_time(sender) – В данной функции происходит определение текущего времени (смотрите статью «Урок 11 по VBScript: Функции vbs для работы с датой и временем«), и извлечение числа часов, минут и секунд. После происходит вызов процедуры time_index три раза, с передачей ей разных параметров. Скрипт часов.
- sub time_index(get_index, get_pos) – Данная процедура отвечает за вывод изображения, в зависимости от числа часов, минут и секунд. В ней есть условный оператор, который проверяет, чему равен первый параметр: если первый параметр меньше 10, то происходит вывод изображений на форму в заданных позициях (первое изображение будет всегда c0). Если параметр больше 10, то происходит извлечение двух чисел, что бы знать, какие именно изображения нужно вывести в скрипте «Электронные часы».
В самом конце сценария мы делаем форму видимой и включаем обработку событий.
А вот аналогичный пример, но уже на языке jscript.

Примеры скриптов — программный код на языке JSCRIPT :
//********************************************************* // примеры скриптов // скрипт - электронные часы // script_chasy.vbs //********************************************************* // объявляем переменные var WSO, WshShell1, f, t; var c0,c1,c2,c3,c4,c5,c6,c7,c8,c9, gif_arr; // создаем ссылку на WindowSystemObject WSO = WScript.CreateObject("Scripting.WindowSystemObject"); // создаем ссылку на WScript.Shell WshShell1 = WScript.CreateObject("WScript.Shell"); // создаем форму f = WSO.CreateForm(0,0,0,0); with(f){ // ширина ClientWidth = 600; // высота ClientHeight = 120; // центрируем CenterControl(); // заголовок окна - скрипт часов Text = "Скрипт \'Часы\'" } //************************************************************************** скрипт часов // загружаем изображения //************************************************************************** var CurDir = WshShell1.CurrentDirectory; //текущий каталог with(WSO){ c0 = LoadImage(CurDir + "\\c0.gif"); c1 = LoadImage(CurDir + "\\c1.gif"); c2 = LoadImage(CurDir + "\\c2.gif"); c3 = LoadImage(CurDir + "\\c3.gif"); c4 = LoadImage(CurDir + "\\c4.gif"); c5 = LoadImage(CurDir + "\\c5.gif"); c6 = LoadImage(CurDir + "\\c6.gif"); c7 = LoadImage(CurDir + "\\c7.gif"); c8 = LoadImage(CurDir + "\\c8.gif"); c9 = LoadImage(CurDir + "\\c9.gif"); } //************************************************************************** // формируем массив gif_arr = [c0,c1,c2,c3,c4,c5,c6,c7,c8,c9]; // включаем таймер t = WSO.CreateTimer(); with(t){ // вызов функции get_time OnExecute = get_time; // задаем интервал в 100 мс Interval = 100; // активируем Active = true; } //************************************************************************** // функция обработки времени //************************************************************************** function get_time(sender){ var cur_date, my_arr, cur_hour, cur_min, cur_sec; // определяем текущее время cur_date = new Date(); // число часов cur_hour = cur_date.getHours(); // число минут cur_min = cur_date.getMinutes(); // число секунд cur_sec = cur_date.getSeconds(); //**************************************************** // вызываем трижды процедуру time_index time_index(cur_hour, 0); time_index(cur_min, 1); time_index(cur_sec, 2); //**************************************************** } //************************************************************************** // функция вывода изображений //************************************************************************** примеры скриптов function time_index(get_index, get_pos){ var mod_res, int_res; if (get_index<=9){ f.DrawImage (0 + get_pos*200,0,0,0,c0) f.DrawImage (90 + get_pos*200,0,0,0,gif_arr[get_index]); }else{ mod_res = get_index % 10; int_res = (get_index-mod_res)/10; f.DrawImage (0 + get_pos*200,0,0,0,gif_arr[int_res]); f.DrawImage (90 + get_pos*200,0,0,0,gif_arr[mod_res]); } } //************************************************************************** f.Show() WSO.Run() |
Скачать архив с примерами скриптов
Во втором примере скрипта на языке JScript логика работы осталась прежней, я только изменил имена некоторых переменных. Если есть вопросы, задавайте в комментариях, буду рад ответить.