Клиентские Windows приложения на JavaScript (исходники)
Хочу рассказать про один интересный способ создания приложений на javascript с родным виндовым gui.
Вообще, существует куча разных вариантов написания виндовых приложений на javascript:
- hta и wsh - html applications и windows script host - это, вероятно, самые известные технологии. hta фактически представляет собой html страницу с расширенными правами в системе - возможностью лазить в сеть, гадить в реестр, файловую систему и подключать к этим делам activex. С использованием hta сделаны многие компоненты самой windows.
- .net framework - этому вообще по барабану, на чем вы пишете, лишь бы итогом был msil. Возможно, jscript.net вместе с windows.forms могут вызвать у кого-то ощущение родного виндового интерфейса. Лично меня они совсем не радуют - ни визуально, ни скоростью.
- xulrunner - framework от mozilla предлагает gecko вместо ie, xpcom вместо com/activex. Это всего за 20 мегабайт оверхеда.
- wxjavascript - известная кросс-платформенная библиотека wxwidgets теперь и для javascript. Все это благодаря js-движку spidermonkey от mozilla и стараниям одного бельгийца. Кстати, этот же уважаемый - автор mod_js для apache.
Ввиду того, что все вышеописанное уныло, громоздко и требует изучения, предлагаю рассмотреть еще один вариант - wso. Цитируя автора:
windowsystemobject (wso) - это универсальный программный комплекс для обеспечения доступа к оконной подсистеме windows на базе архитектуры com, для создания оконных интерфейсов в программах, написанных на сценарных (скриптовых) языках, а также в программах, написанных на других языках и в других системах программирования. С помощью wso можно легко создавать оконные интерфейсы на jscript, vbscript, perl, python. После этих слов ничего, кроме огромного человеческого спасибо Александру Борисовичу Веретенникову, и не скажешь.
Опять цитата о возможностях wso:
- wso обеспечивает полный доступ ко всем возможностям оконной системы, включая рисование в окнах и поддержку всех встроенных управляющих элементов windows.
- wso поддерживает использование любых элементов activex, таких как internet explorer или windows media player.
- wso поддерживает работу со всеми популярными форматами графических файлов.
- wso доступен из любого языка программирования, поддерживающего com-интерфейсы автоматизации.
- Доступ к wso осуществляется с помощью интуитивно понятной объектной модели, описанной в этом документе. Программисты, знакомые с оконным программированием для windows, быстро обнаружат, что ничего нового им осваивать не нужно.
- wso обеспечивает полную поддержку обработки событий от оконных элементов.
- wso позволяет использовать символические имена констант, принятые в оконном программировании windows, а не мучиться с их числовыми значениями.
- wso работает в любой современной версии windows, а именно: 98se, me, nt 4, 2000, xp и 2003.
Все просто замечательно! Теперь единственное, что отделяет нас от родного gui на javascript - это регистрация компонента wso. Как известно, windows требует регистрации в реестре com/activex компонентов перед их использованием. Это серьезное ограничение, так как нужны права администратора системы. Тем не менее, в Редмонде уже столкнулись с данной проблемой и, начиная с xp sp2, достаточно описать интерфейсы всех activex в manifest приложения. Итак, что нам нужно для сборки самостоятельной программы на javascript + wso:
- Сам wso.dll. Качаем и используем даже в коммерческих приложениях free of charge, но вознося хвалу Александру Борисовичу.
- Код программы на javascript. Примеры тут.
- Загрузчик app.exe, подключающий ms scriptcontrol для интерпретации js (фактически это аналог wscript.exe). Его нужно написать самостоятельно или взять готовый в конце статьи. В моем варианте это десять строк на Delphi - копипейст из статьи про scriptcontrol.
- Манифест приложения app.exe.manifest - манифест, где нужно указать зависимость от компонента wso, других activex (если нужно) и заодно включить поддержку xp-шных тем оформления. Изготавливается вручную следующим образом:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestversion="1.0">
<assemblyidentity
type="win32"
name="client"
version="1.0.0.0" />
<dependency>
<!-- подключаем wso -->
<dependentassembly>
<assemblyidentity
type="win32"
name="wso.sxs"
version="1.0.0.0" />
</dependentassembly>
</dependency>
<dependency>
<!-- поддержка тем оформления xp -->
<dependentassembly>
<assemblyidentity
type="win32"
name="microsoft.windows.common-controls"
version="6.0.0.0"
publickeytoken="6595b64144ccf1df"
language="*"
processorarchitecture="x86"/>
</dependentassembly>
</dependency>
</assembly>
- Манифест для wso - wso.sxs.manifest, описывающий интерфейсы activex компонента. Этот манифест генерируется замечательной программой regsvr42.exe. Она перехватывает все записи, которые делаются в реестр при регистрации компонента, и сохраняет их в виде manifest. Аналогичную операцию нужно проделать для всех внешних компонентов, которые вы хотите использовать.
Вот, что получилось у меня: wso_demo.zip (573 kb) slil.ru / onlinedisk.ru / rapidshare.de. Загрузчик demo.exe создает глобальный объект wso и запускает функцию main() из файла main.js. Экзешник, естественно, можно переименовать (не забывая про его manifest) и вставить иконку любым менеджером ресурсов.
|