Пример скрипта «Электронные часы»

Пример скрипта «Электронные часы» Примеры скриптов и макросов для Word и WSH

Всем привет, с вами автор блога scriptcoding.ru. В этой статье мы рассмотрим примеры скиптов сервера Windows Script Host под названием «Электронные часы».

Фактически, мы напишем два примера скриптов, один на языке vbscript, а другой на языке jscript. Чтобы не мучиться с копированием кода с сайта, вы сможете скачать архив со всеми принадлежностями по ссылке ниже. Задача довольно проста: будет выводиться форма, на которой должны отображаться электронные часы, а именно, число часов, минут и секунд. Предварительно я подготовил в Фотошопе 10 рисунков в формате gif, они содержат цифровые значения от 0 до 9.

Скрипт часов – начинаем программировать

Скрипт Часы

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

Пример скрипта часов на VBSCRIPT

Примеры скриптов — программный код на языке VBSCRIPT :

'*********************************************************' примеры скриптов' скрипт - электронные часы' script_chasy.vbs'********************************************************* OptionExplicit ' объявляем переменныеdim WSO, WshShell, f, tdim c0,c1,c2,c3,c4,c5,c6,c7,c8,c9, gif_arr ' создаем ссылку на объект WindowSystemObjectset WSO = WScript.CreateObject("Scripting.WindowSystemObject"' создаем ссылку на объект WScript.Shellset WshShell = WScript.CreateObject("WScript.Shell"' создаем формуset f = WSO.CreateForm(0,0,0,0)With f ' ширина .ClientWidth = 600 ' высота .ClientHeight = 120 ' центрируем .CenterControl() ' заголовок окна - скрипт часов .Text = "Скрипт 'Часы'"EndWith '**************************************************************************' загружаем изображения'**************************************************************************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")EndWith'************************************************************************** ' формируем массив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 = trueEndWith '**************************************************************************' функция обработки времени'**************************************************************************скрипт часов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_indexcall time_index(cur_hour, 0) call time_index(cur_min, 1) call time_index(cur_sec, 2) '****************************************************endfunction '**************************************************************************' процедура вывода изображений'************************************************************************** примеры скриптов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) endifendsub'************************************************************************** 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

Примеры скриптов — программный код на языке JSCRIPT :

//*********************************************************// примеры скриптов// скрипт - электронные часы// script_chasy.vbs//********************************************************* // объявляем переменныеvar WSO, WshShell1, f, t;var c0,c1,c2,c3,c4,c5,c6,c7,c8,c9, gif_arr; // создаем ссылку на WindowSystemObjectWSO = WScript.CreateObject("Scripting.WindowSystemObject");// создаем ссылку на WScript.ShellWshShell1 = 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 =newDate();// число часов 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 логика работы осталась прежней, я только изменил имена некоторых переменных. Если есть вопросы, задавайте в комментариях, буду рад ответить.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий