Объект WindowSystemObject — Создаем оконный интерфейс Windows

Объект WindowSystemObject — Создаем оконный интерфейс Windows Объектная модель Windows Script Host

Доброго времени суток всем читателям блога scriptcoding.ru. В этой публикации мы рассмотрим объект WindowSystemObject, который позволяет программными средствами создавать окна для сценариев на языке jscript.

Используя компонент WindowSystemObject (WSO) пользователь может с легкостью подключать для своих скриптов оконный интерфейс Windows, точнее все возможности оконной системы Windows. Дело в том, что сервер сценариев Windows Script Host предлагает довольно скудные возможности для создания оконных интерфейсов в программах, написанных на сценарных (скриптовых) языках.

Компонент WindowsSystemObject – Оконный интерфейс Windows

создаем оконный интерфейс с помощью объекта WindowSystemObject

Как альтернативный вариант, можно использовать приложение LangMF, но есть одна трудность – LangMF поддерживает только синтаксис VBScript, конечно, можно использовать не все приложение, а только объект Atomix.LangMF, но и это требует дополнительный смены синтаксиса скрипта. Но, есть и второй способ решения задачи – использование объекта WindowSystemObject, данный элемент предоставляет следующие возможности:

  • Полный доступ к оконному интерфейсу системы Windows, плюс, возможность рисовать в окнах.
  • Поддержка работы со всеми популярными форматами графических файлов.
  • Подключить WindowSystemObject можно с помощью любого языка программирования, который это позволяет (например, JScript,VBScript, Perl или Python).
  • Легко осуществляется обработка событий для оконных элементов (обработка нажатых клавиш и движений мышки).

После того как программный пакет с компонентом будет установлен, в папке WSO будет находиться справочный документ по объекту WindowSystemObject, а в подпапке Demo примеры на различных языках. Скачать компонент можно по ссылке ниже.

Работа с WindowsSystemObject — Оконный Windows интерфейс на примере игры

WindowSystemObject - Программирование оконного интерфейса Window

Скачать компонент

Что бы проявить вас интерес к программированию оконного интерфейса Windows, я рассмотрю пример из папки (WSODemoJscript), сценарий game.js, сценарий демонстрирует создание простенькой игры на языке JScript. Я решил взять исходный код, немного его переделать и добавил строки с комментариями:

//**********************************************// Объект WindowSystemObject// Создаем для игры оконный интерфейс Windows// game_new.js//**********************************************rWidth =100 o =new ActiveXObject("Scripting.WindowSystemObject") f = o.CreateForm(0,0,0,0)f.ClientWidth=500f.ClientHeight=300f.CenterControl()f.BorderWidth=10 f.Text="Пример игры"//Событие OnMouseMove возникает когда пользователь перемещает мышь//Будет вызвана функция FormMouseMovef.OnMouseMove= FormMouseMove//Событие OnKeyDown возникает, когда пользователь нажимает клавишу на клавиатуре//При нажатии клавиши на клавиатуре будет вызвана функция FormKeyDownf.OnKeyDown= FormKeyDown //-------------------------------------------------------------------------------------//                  первый фрейм с элементами. Оконный Windows интерфейс//-------------------------------------------------------------------------------------j = f.CreateFrame(0,0,100,0)//Определяем положение фрейма, тут AL_RIGHT - положение справа//Метод Translate переводит строку текста Text в значение Dataj.Align= o.Translate("AL_RIGHT")//Создаем кнопку, OnClick - при нажатии запустить функцию Pausej.CreateButton(10,5,75,25,"Пауза(P)").OnClick= Pause//Метод TextOut добавляет надпись "Уровень:"lil=j.TextOut(10,40,"Уровень:")//Создаем раскрывающийся список//Флаг CBS_DROPDOWNLIST задает стиль спискаk = j.CreateComboBox(10,60,75,25,o.Translate("CBS_DROPDOWNLIST"))//Используя цикл, добавляем 9 элементовfor(p =1; p<10; p++) k.Add(p)//OnChange - обработка событий, при выборе элемента со списка//будет вызвана функция LevelChangek.OnChange= LevelChange//Определяем выбранный элемент из списка//Нумерация идет с нуляk.ItemIndex=1//------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------//                  второй фрейм с элементами. Оконный Windows интерфейс//-------------------------------------------------------------------------------------v = f.CreateFrame(0,0,0,0)v.Align= o.Translate("AL_CLIENT")v.OnMouseMove= FormMouseMove//Цвет цона черныйv.Color= 0x0000000//Тип внешней рамкиv.BevelOuter=1//Тип внутренней рамкиv.BevelInner=-1 //Рисуем белый круг со случайным положениемc = v.Circle(Math.floor((v.ClientWidth-1)*Math.random()),50,10) //Рисуем прямоугольник с заокругленными угламиr = v.RoundRect(10,280,rWidth,10,10,10)r.Color= 0x000000FF//Положение прямоугольника в самом низуr.Align= o.Translate("AL_AT_BOTTOM")//Переменные сх и су отвечают за смещениеcx =3cy =3//-------------------------------------------------------------------------------------- //Создаем таймерt = o.CreateTimer()//OnExecute - обработка событий с течением времени//Вызываем TimerExecutet.OnExecute= TimerExecute//Интервал в милисекундах для таймераt.Interval=10//Активируем таймерt.Active=true //--------------------------------------------------------------------------------------//Обработка нажатой клавиши. Оконный интерфейс Windows//--------------------------------------------------------------------------------------// Key - код клавишиfunction FormKeyDown(Sender,Key,Flags){// Если код клавиши равен 80if(Key ==80)// Вызываем функцию Pause параметром SenderPause(Sender)} //--------------------------------------------------------------------------------------//Обработка передвижения мыши. Оконный интерфейс//--------------------------------------------------------------------------------------function FormMouseMove(Sender,x,y,Button,Flags){x = x -(r.Width/2)if(x<0) x =0m = v.ClientWidth- r.Widthif(x>m) x = m//Меняем отступ слева прямоугольникаr.Left= x} //--------------------------------------------------------------------------------------//Смена положения круга с течением времени//Условие проигрыша//Создание оконного интерфейса Windows//--------------------------------------------------------------------------------------function TimerExecute(Sender){//Начальное положение кругаc.Left+=cxc.Top+=cy//v.ClientHeight - высота второго фрейма//c.Height - диаметр круга//c.Height - высота прямоугольника//Если отступ шара сверху больше чем(v.ClientHeight-c.Height-r.Height)if(c.Top>v.ClientHeight-c.Height-r.Height){if((c.Left+20<r.Left)||(c.Left-20>r.Left+r.Width)){//Останавливаем счетчикSender.Active=falseif(f.MessageBox("Конец игры, повторить?","",o.Translate("MB_ICONQUESTION | MB_OKCANCEL"))!=1)//Если пользователь нажал Отмена//Выходим из скриптаf.Close();//Иначе, сбрасываем положение кругаelse{c.Top=0cy = sign(cy)*cySender.Active=true}return}cy =-cy} if(c.Top<0)cy =-cyif((c.Left>v.ClientWidth-20)||(c.Left<0))cx =-cx} function Pause(Sender){t.Active=!t.Active} function sign(x){if(x>0)return1;elseif(x<0)return-1;elsereturn0} function LevelChange(Sender){cx = sign(cx)*(Sender.ItemIndex+1)cy = sign(cy)*(Sender.ItemIndex+1)} f.Show()o.Run()

Последние две строки кода делают форму видимой (f.Show) и позволяют обрабатывать сообщения в пределах формы (o.Run).

Оконный Windows интерфейс созданной игры

Скачать архив с примером

Как видите, объект WindowSystemObject предоставляет не просто оконный интерфейс для Windows, но и возможность обрабатывать нажатия клавиш и перемещения мыши, как пример, можете рассмотреть статьи «Сканер портов» и «Сканер IP адресов«.

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