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

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

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

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

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

Скрипт Часы

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

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

Примеры скриптов — программный код на языке 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

Примеры скриптов — программный код на языке 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 логика работы осталась прежней, я только изменил имена некоторых переменных. Если есть вопросы, задавайте в комментариях, буду рад ответить.

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