Данная статья открывает серию публикаций по созданию и использованию гаджетов в новой операционной системе Microsoft Windows Vista. В ней излагаются основы самостоятельного создания гаджетов для Vista и области их применения (особенно для задач администрирования). Статья написана легким для понимания языком и расчитана на самый широкий круг читателей, даже на тех кто никогда не занимался написанием скриптов.
Создание гаджетов: Часть 1
Данная статья основана на предварительной версии операционной системы Microsoft Windows Vista . Это означает, что характеристики, обсуждаемые в этой статье, могут измениться: некоторые из них могут быть не включены в финальную версию продукта по соображениям маркетинга, технических требований и прочее. Мы будем корректировать содержание этой статьи, если и когда такие изменения произойдут.
И Победителем становится…
Каждый год как минимум один кинофильм бывает номинирован сразу на полдюжины наград Американской кино академии, включая все большие награды: «Лучшая картина», «Лучший режиссер», «Лучший актер», «Лучшая актриса». Это здорово, за исключением того, что очень часто актеры вынуждены сидеть на приеме в ночь вручения Оскаров, притворно улыбаясь и вежливо аплодируя, в то время как другие картины загребают все главные награды. «Лучшая картина» или «Лучший режиссер»? Ну-у… нет. Но мы победили в номинации «Лучший звук» и «Лучшие костюмы».
Как… приятно…
Тем, кто пишет скрипты это чувство знакомо слишком хорошо. Каждый раз, при анонсе новой операционной системы, создатели скриптов, сидящие с закрытыми глазами и скрещенными пальцами, надеются на то, что уж в этот-то раз один из самых главных анонсов будет адресован именно им. И каждый раз, после анонса новой операционной системы создатели скриптов остаются разочарованными. Несомненно, будут новые классы Windows Management Instrumentation (WMI) и пригоршня новых COM объектов, для того чтобы поиграться с ними, и это здорово: больше новых вещей - еще лучше. К несчастью получение новых классов WMI немного похоже на победу в номинации на «Лучший звук»: несмотря на то, что вы рады выиграть хоть что-нибудь, вы никак не можете перестать быть немного разочарованным, глядя на то, как другие люди уходят с действительно классными наградами. Однажды вы бы хотели стать Победителем и вы бы хотели чтобы однажды самые главные инновации были адресованы именно вам. Приз за «Лучший звук» – здорово, но вы хотите однажды выиграть номинацию «Лучшая картина» или «Лучший режиссер».
Возможно, вы этого не знаете, но если вы пишите скрипты, всю вашу жизнь вы ждали Windows Vista .
Краткое (очень) введение в технологию Microsoft Gadgets
Вы услышали верно. Windows Vista наполнена множеством новых вещей, и одна из самых ожидаемых их них – панель Windows Sidebar – предназначена специально для тех кто пишет скрипты. Панель Windows Sidebar это область экрана, специально зарезервированная для безделушек – гаджетов, также как панель Quick Launch специально зарезервирована для размещения ярлыков программ. Гаджеты это мини программы, с очень маленьким кодом, делающие что-нибудь, что заложил в них их создатель. Например, в состав Widows Vista входят несколько гаджетов, таких как простейший калькулятор и пара гаджетов для отслеживания лент новостей по RSS. Также обычно новое сообщество людей возникает вокруг гаджетов: для получения дополнительной информации (и скачивания уже созданных членами сообщества гаджетов) посетите веб сайт Microsoft Gadgets . Вам не потребуется много времени просматривать галерею гаджетов, для того чтобы решить для себя насколько здорово и удобно пользоваться гаджетами.
Вы знаете – это хорошая идея. Может быть, пора поменьше говорить и немного больше делать: давайте посмотрим, сможете ли вы создать ваш первый гаджет.
Создание вашего первого гаджета
Один из видов критики, которой подвергалась Microsoft (да-да, верите ли вы в это или нет, но некоторые люди критиковали Microsoft в прошлом), в том, что многие из наших продуктов, очевидно, созданы для использования роботами или пришельцами с планеты Омикрон IV, в любом случае они спроектированы не для использования людьми. К счастью в случае с гаджетами это не так. (Даже если вы случайно являетесь роботом или инопланетянином с планеты Омикрон IV, расслабьтесь потому, что вы также сможете легко создавать гаджеты.) Для того чтобы создать свой гаджет вам нужно только две вещи:
• Файл-«манифест» с именем Gadget.xml. Этот манифест содержит все настройки для вашего гаджета, включая его имя, автора и информацию о правах (копирайт) и информацию о странице HTML которой фактически является гаджет.
• Файл HTML (например, Test.htm). Несмотря на то, что гаджеты могут выглядеть не похоже на них, гаджеты в действительности не более чем файлы HTML: вы просто создаете HTML файл, добавляете соответствующие тэги и код скрипта, и получаете ваш собственных гаджет.
Замечание. Да, мы знаем: вы даже не представляете себе, что мы имеем в виду под словами «соответствующие тэги и код скрипта». Расслабьтесь – это как раз то, о чем эта статья.
Для того чтобы создать гаджет требуются только эти две вещи. Конечно, когда вы создаете более сложные гаджеты, вам понадобится иметь дело с файлами иконок, графическими файлами, файлами настроек и другими элементами. Но до них мы дойдем в свое время .
Так ли это просто? Что означает «Конечно, когда… »? Обратите внимание: это похоже на тот случай когда вы делаете что-то вроде ужасно-скомпилированного компиляционного процесса, возможно используя какой-то сторонний компилятор, который Спецы-В-Написании-Скриптов продадут вам всего за 39,95$ плюс доставка и упаковка. (Теперь, когда вы знаете, чего мы хотим, мы обдумаем что-то вроде этого.) Здесь написано, как вам подготовить все необходимые файлы и «скомпилировать» их в гаджет, без использования какого бы то ни было проприетарного компилятора:
• Поместите все файлы с папку для гаджетов.
Точно так: поместите все файлы в папку, и вы получите гаджет. Без компиляции, компиляторов, ничего больше утомительных или технических действий – просто скопируйте все файлы в выбранную папку.
И если вы все еще хотите послать нам 39,95$, мы будем счастливы, получить их.
Папка Gadgets Конечно, это не пренебрежимо легко: вы не можете просто поместить ваши файлы в любую из уже существующих папок. Вместо этого вы должны следовать следующей процедуре:
Для начала найдем специальную папку “Gadgets”. Быстро добраться до вашей папки Gadgets можно набрав в окошке Run (Выполнить) команду:
Замечание. Что вы имеете в виду? Вы не можете найти команду Run в меню Пуск? Ах, да: по некоторым причинам эта команда скрыта по умолчанию. Все в порядке: для того чтобы сделать команду Run видимой просто щелкните на кнопке Start (Пуск) правой кнопкой мыши и затем щелкните Properties (Свойства) . В окошке Taskbar and Start Menu Properties (Свойства Панели задач и меню «Пуск») , на вкладке Start Menu (Меню «Пуск») щелкните Customize (Настроить).
Продолжим? Хорошо. Вы окажетесь в окошке Customize Start Menu (Настойка Меню «Пуск»), прокрутите список вниз и поставьте галочку напротив пункта Run command (Команда «Выполнить»). Щелкните OK дважды, и команда Run вернется на свое законное место.
Да, и еще, обычно Спецы-В-Написании-Скриптов просят 39,95$ за инсайдерскую информацию такого рода. Но в этот раз мы дадим ее вам бесплатно.
Внутри папки Gadgets создайте новую папку. Дайте ей любое имя, какое захотите, добавив в конце имени расширение .gadget (например, Test.gadget). Определенно вы сильно облегчите себе жизнь, если имя папки будет как-то соотноситься с гаджетом, который в ней будет. Однако операционная система просто использует эту папку, для того чтобы определить, что файлы в ней составляют гаджет. Имя гаджета определяется информацией из файла манифеста, а не по имени папки (Спецы определяют это с большими трудностями).
Все что вам нужно сделать сейчас это поместить ваши файлы (такие как Gadget.xml и Test.htm) в эту папку. Означает ли это что у вас уже есть гаджет? Будьте уверены – это так. Фактически осталось только нажать + наверху панели Windows Sidebar , для того чтобы отобразить набор гаджетов имеющихся на вашем компьютере. Новый гаджет созданный вами, появиться в окошке в списке доступных гаджетов.
Замечание. Что такое? Вы не можете найти и Windows Sidebar тоже? Ладно. Если в ы не можете найти W indows Sidebar просто сделайте следующее: откройте меню Start (Пуск) и щелкните All Programs (Все программы) . Щелкните Accessories (Стандартные) и вы увидите ссылку на панель Sidebar.
Установка гаджета Если вы не уверены что ваш гаджет действительно появится в списке доступных гаджетов, вы можете установить его просто перетащив его иконку на панель Windows Sidebar и отпустить кнопку мыши (или просто щелкнуть правой кнопкой мыши на иконке гаджета и щелкнуть Add (Добавить). Ваш гаджет появится и будет готов к использованию. Если вы решите удалить его с панели Sidebar , просто щелкните на нем и, не отпуская кнопки мыши, дождитесь появления маленького крестика в виде буквы Х, который появится в правом верхнем уголке гаджета. Если вы не уверены в том о каком Х мы говорим, что ж, вот он:
Файл манифеста Как мы заметили ранее, для того чтобы создать собственный гаджет необходимы только две вещи: файл манифеста и HTML файл. И мы знаем что вы думаете: конечно, на планете Омикрон IV ваши парни вероятно используют файлы манифеста все время (некоторые думают так, некоторые нет). Но что знают о файлах манифеста системные администраторы?
Что ж, одну вещь вы знаете (или, наконец, узнали сейчас) это то, что «файл манифеста» это просто технический термин. В сущности, мы говорим о чем-то похожем на . INI файл, простой текстовый файл (в данном случае в формате XML), который содержит настройки для гаджета. Общеизвестно, идея написания вещей в XML может привести вас в трепет и заставить дрожать поджилки. Слушайте, не беспокойтесь об этом. Вот простая основа XML файла, такая, с какой вам придется иметь дело:
Вот что мы имеем в виду:
<?xml version="1.0" encoding="utf-8" ?> <gadget> <name>My First Gadget</name> <author>The Microsoft Scripting Guys</author> <copyright>2006 Microsoft Corporation</copyright> <description>Sample gadget that returns the name of the installed operating system.</description> <icons> <icon>icon.png</icon> </icons> <version value="1.0.0.0" MinPlatformVersion="0.1"></version> <sidebar> <type>html</type> <permissions>full</permissions> <code>test.htm</code> <website>www.microsoft.com/technet/scriptcenter</website> </sidebar> </gadget>
Предупреждая ваши вопросы: да, вы можете просто скопировать этот файл и использовать его как он есть, просто внеся изменения (если необходимо) в совсем небольшое число значений в тэгах. (Да и не забудьте – вы должны дать файлу имя Gadget.xml.) Тэги, которые, вы, может быть захотите (должны) изменить, описаны в следующей таблице:
Для ясности приведем рисунок на котором показаны привязки элементов файла-манифеста к элементам, показанным в окошке выбора гаджета:
Создание иконки
Использовать или нет собственную иконку для вашего гаджета: если вы не добавите ее (или если вы не укажите никакой иконки в файле манифеста), в окне выбора гаджета будет установлена иконка по умолчанию (без вашего участия).
Если вы приняли решение использовать собственную иконку, имейте в виду, что «иконка» это просто имя, которое мы дали файлу с изображением. В действительности это не иконки Windows (файлы с расширением .ICO), которые могут быть созданы с помощью специальных программ. Вместо этого иконка - это просто файл с картинкой в формате .GIF, .JPG, или .PNG. Гаджеты поставляемые с Windows Vista все используют графику в формате .PNG потому, что графика в формате .PNG позволяет использовать прозрачность, давая вам возможность сделать отлично выглядящие картинки. (Здесь главное наличие таланта художника.) Однако вы не обязаны сохранять ваши иконки в формате .PNG. Вместо этого, загрузите Paint, создайте иконку и сохраните ее в формате .JPG . Ваша иконка все равно будет хорошо выглядеть в окне выбора гаджета.
Хороший вопрос: какого размера должна быть сделана иконка? Оптимальный размер это 64 на 64 пиксела. Окно выбора гаджета изменит размер иконки до необходимого минимума, но, создав иконку 64х64 пиксела, вы обезопасите себя от любых искажений картинки, связанных с необходимостью сжимать или растягивать изображение до необходимого размера.
Чтобы вы удивились, вот иконка, которую мы использовали для этой статьи:
Нам тоже нравится.
Замечание. Вы могли заметить ранее, в файле манифеста, что тэг ICON вложен внутрь тэга ICONS:
<icons> <icon>icon.png</icon> </icons>
Означает ли это, что вы можете использовать дополнительные иконки в файле манифеста? Возможно, хотя, если честно, мы не уверены, что вы должны использовать эти дополнительные иконки. Вот и все что мы хотели рассмотреть.
Файл HTML
Файл HTML, который является основой гаджета, действительно ничем не отличается от обычной веб-страницы которая использует динамический HTML. Фактически для создания HTML файла вы можете использовать любые допустимые HTML тэги (включая и CSS стили) плюс скрипт. Сейчас мы покажем вам пример HTML страницы. Но перед тем как мы это сделаем, однако, совершим небольшой обзор и пройдемся по тому, как вам внедрить WMI код в гаджет.
Работаем с WMI
Как системный администратор вы используете написание скриптов, чтобы делать тяжелую работу с помощью WMI . Это понятно, кроме всего, WMI это технология которая помогает вам управлять всем от принтеров до дисков и мышей и мониторов. И лучше всего то, что WMI легко использовать. Например, предположим, вы хотите узнать название операционной системы установленной на локальном компьютере. Нет проблем, вот WMI скрипт который вернет эту информацию вам:
strComputer = "." Set objWMIService = GetObject("winmgmts:\" & strComputer & "rootcimv2") Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem") For Each objItem in colItems Msgbox objItem.Caption Next
Если вы планируете создавать гаджеты для системного администрирования, для вас плохие новости: скрипты WMI которые вы используете, не будут работать в гаджете. (Стойте, не впадайте в крайности: дальше будут новости лучше, обещаем.) Это потому, что внутри гаджет это не более чем веб-страница, и из соображений безопасности, веб-страницы не способны использовать функцию GetObject. Если вы поместите последующий код в гаджет все закончится этим сообщением об ошибке:
ActiveX component can't create object: 'GetObject' (Не возможно создание объекта компонентом ActiveX : 'GetObject')
Ох-ох-ох…
Но, без паники. Вы все еще можете использовать WMI скрипты внутри гаджета, вы только не можете использовать GetObject и имя winmgmts. Вместо этого, вам нужно использовать CreateObject для создания экземпляра объекта WbemScripting.WbemLocator , затем используйте метод ConnectServer для подключения к WMI сервису. Другими словами, вам нужен скрипт похожий на этот:
strComputer = "." Set objLocator = CreateObject("WbemScripting.SWbemLocator") Set objWMIService = objLocator.ConnectServer(strComputer, "rootcimv2") Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem") For Each objItem in colItems Msgbox objItem.Caption Next
Видите ? Как мы говорили , не надо паники . (Хотя, если уж начистоту, это вероятно была ваша ошибка что вы паниковали сначала.) Единственное отличие скрипта использующего WMI moniker от скрипта который использует метод ConnectServer заключается в том как вы создаете подключение в сервису WMI . Ранее для создания такого подключения вы использовали одну строчку кода:
Set objWMIService = GetObject("winmgmts:" & strComputer & "rootcimv2")
Теперь вы используете две строки кода для создания подключения (да, рабочая нагрузка удваивается!): вы создаете экземпляр объекта WbemScripting.SWbemLocator, затем, используя метод ConnectServer, подключаетесь к сервису WMI. Заметьте, что мы передаем в ConnectServer два параметра: имя компьютера, к которому подключаемся (представленное переменной strComputer) и пространство имен WMI к которому хотим подключиться (в данном случае rootcimv2):
Set objLocator = CreateObject("WbemScripting.SWbemLocator") Set objWMIService = objLocator.ConnectServer(strComputer, "rootcimv2")
Усвоили? Отлично. Теперь вернемся к нашей правильно-спланированной статье.
Создание HTML файла
Как мы уже заметили ранее, гаджет это всего лишь HTML файл. Это означает, что любые элеметны (включая динамические элементы) которые вы можете использовать в странице HTML, также могут быть использованы и в гаджете. Как вы вероятно уже заметили, гаджет включает в себя код на VBScript. И, несмотря на то, что многие ранние гаджеты доступные через веб-сайт Microsoft Gadgets использовали JScript или JavaScript, но VBScript работает все же лучше (скоро вы в этом убедитесь).
Ранее мы уже представляли вам гаджет который возвращает имя операционной системы установленной на локальном компьютере, и теперь давайте посмотрим как мы можем вставить этот скрипт в гаджет. Мы уже сделали очень простой гаджет, который включает в себя одну кнопку, если щелкнуть на которой, гаджет отобразит значение свойства Caption операционной системы в окошке сообщения. Вот HTML код нашего гаджета:
<html> <head> <title>My First Gadget</title> <style> body{width:120;height:160} </style> </head> <script language="VBScript"> Sub RunSub strComputer = "." Set objLocator = CreateObject("WbemScripting.SwbemLocator") Set objWMIService = objLocator.ConnectServer(strComputer, "rootcimv2") Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem") For Each objItem in colItems Msgbox objItem.Caption Next End Sub </script> <body> <input type="button" value="Run" name="run_button" onClick="RunSub"> </body> </html>
Как вы можете видеть, в этом коде нет ничего особенного: это простейший HTML , который не делает ничего больше чем отображение одной кнопки на странице. Когда вы щелкаете по этой кнопке, выполняется подпрограмма с именем RunSub , затем эта подпрограмма использует WMI для определения имени установленной на компьютере операционной системы.
Замечание. Ладно. Может быть, это простейший HTML для кого-то, но что если вы не разбираетесь в HTML кодировании? В этом случае вы можете взглянуть в наше руководство HTA Tutorial, состоящее из двух частей. Это поможет вам освоится с такими тэгами как
<SCRIPT> и <INPUT>
.
Единственная вещь здесь, на которой стоит остановиться подробнее это тэг STYLE. Когда мы начнем создавать более утонченные гаджеты мы обсудим тэг STYLE детальнее, но сейчас, однако, мы просто отметим, что мы используем этот тэг для настройки высоты и ширины нашего гаджета по умолчанию:
<style> body{width:120;height:160} </style>
Этот тэг просто говорит, что мы хотим чтобы наш гаджет был 120 пикселей в ширину (панель Windows Sidebar в ширину имеет приблизительно 130 пикселей) и 160 пикселей в высоту. Для данного гаджета 160 высота в пикселей может быть и многовато, и если это так, то мы просто назначим свойству height другое значение:
<style> body{width:120;height:40} </style>
Когда вы установите наш гаджет на панель Windows Sidebar , он будет выглядеть примерно так
И вот уто произойдет когда вы щелкните на кнопке:
Давайте вы дальше напишете маме: расскажете ей о замечательном гаджете, который вы только что создали. Просто возвращайтесь, когда сделаете это, и мы двинемся дальше узнавать что-то еще.
Отображение данных в теге SPAN
Ну что ж, мы создали гаджет, который когда на нем щелкаешь, отображает имя операционной системы в окошке сообщения. В этом нет ничего плохого и вероятно бывает необходимо, чтобы гаджет возвращал так много информации что у вас нет выбора кроме как отобразить ее в окошке сообщения, в окне Internet Explorer или еще где-нибудь.
С другой стороны, раньше или позже вам понадобиться создать гаджет, на который не требуется воздействовать для получения окошка с сообщением, и в котором не требуется щелкать по кнопке для того, чтобы получить некоторую информацию. Например, предположим, вы решили создать часы для вашей панели Windows Sidebar. Это здорово, но вы действительно хотите щелкать по кнопке каждый раз, когда решите узнать который час? И когда вы сделаете это, хотите ли вы, чтобы время отображалось в окошке сообщения? Конечно, жителям планеты Омикрон IV нравится такой способ. Но люди находят это настолько скучным, что даже не заслуживает упоминания.
Другими словами нам нужны возможности для создания гаджетов которые могут:
• Отображать данные внутри границ самого гаджета. Далее в статьях этой серии мы покажем вам путь как отображать информацию графически, но сейчас мы сфокусируемся на отображении текстовых данных.
• Получать данные автоматически, без какого-либо участия пользователя.
• Периодически обновлять информацию. Например гаджет который ведет мониторинг объема доступной памяти компьютера (скоро мы сделаем с вами такой гаджет) не должен однажды получить значение доступной памяти только в момент своего запуска и затем сообщать что все хорошо. Вместо этого, необходимо периодически получать новое значение для текущего момента времени.
Это звучит сложно, но мы будем делать это легко изучая эти возможности по одной за раз. Давайте начнем с обсуждения тэга SPAN, простого и легкого способа для отображения информации внутри тела самого гаджета.
Вот исправленная версия нашего HTML файла. В этом новом гаджете вы все еще должны щелкнуть на кнопке для запуска подпрограммы RunSub, однако, в данном случае имя операционной системы не выводится во окне сообщения, а вместо этого оно пишется на самом гаджете:
<html> <head> <title>My First Gadget</title> <style>body{width:120;height:160} </style> </head> <script language="VBScript"> Sub RunSub strComputer = "." Set objLocator = CreateObject("WbemScripting.SwbemLocator") Set objWMIService = objLocator.ConnectServer(strComputer, "rootcimv2") Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem") For Each objItem in colItems DataArea.InnerHTML = objItem.Caption Next End Sub </script>
Когда мы щелкаем кнопку в этом гаджете, возвращаемая информация отображается внутри самого гаджета:
Здорово.
Бонус: украшаем гаджет с помощью фона
Мы еще поговорим о создании фантастически-выглядящих гаджетов позднее в данной серии. А сейчас, мы упомянем лишь одну простую технику, с которой вы сможете приукрасить ваши гаджеты. Например, предположим у вас есть картинка, которая, по вашему мнению, может стать хорошим фоном для гаджета. В этом случае, все, что вам нужно сделать, это установить значение атрибута background в тэге BODY вашего HTML файла. Эта строчка кода указывает гаджету использовать файл с именем background . jpg как фон для гаджета:
<body background = "background.jpg">
Просто убедитесь, что файл background.jpg находится в папке с вашим гаджетом.
С другой стороны, вы можете создать гаджет с другим фоновым цветом добавив параметр bgcolor в тэг BODY. Хотите имеет гаджет с ярко красным фоном? Да, почему нет?
<body bgcolor = "red">
Наконец, вы можете создать гаджет с градиентной заливкой фона используя один из фильтров Мискософт мультимедиа. В этом гаджете мы уже модифицировали стиль тэга BODY двумя способами:
• Установили шрифт Arial , белого цвета, величиной 8 пунктов.
• Добавили градиентный фильтр.
Вот код для нашего модифицированного гаджета:
<html> <head> <title>My Gadget</title> <style> body{width:120;height:160;font:8 pt Arial;color:white; filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=1, StartColorStr="#000000", EndColorStr="#0000FF")} </style> </head> <script language="VBScript"> Sub RunSub strComputer = "." Set objLocator = CreateObject("WbemScripting.SwbemLocator") Set objWMIService = objLocator.ConnectServer(".", "rootcimv2") Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem") For Each objItem in colItems DataArea.InnerHTML = objItem.Caption Next End Sub </script>
Это не искусство конечно, но все же лучше чем просто чистый белый прямоугольник пришлепнутый на панель Sidebar . Замечание. Для получения дополнительной информации о использовании фильтров градиента смотрите HTA Developer's Center
Создание гаджета типа “Auto-Run” Получение гаджета отображающего информацию на своем теле (в противоположность окну сообщения) это приятный шаг вперед, и лучшее понимание духа гаджетов. Однако, мы все еще вынуждены щелкать на кнопке для получения этой информации. Обязательно должен существовать способ автоматического получения и отображения информации в тот момент, когда гаджет загружается.
Спорим, он есть.
Вот гаджет автоматически возвращает и отображает имя установленной операционной системы, не требуя нажатия кнопки:
<html> <head> <title>My Gadget</title> <style> body{width:120;height:160;font:8 pt Arial;color:white; filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=1, StartColorStr="#000000", EndColorStr="#0000FF")} </style> </head> <script language="VBScript"> Sub RunSub strComputer = "." Set objLocator = CreateObject("WbemScripting.SwbemLocator") Set objWMIService = objLocator.ConnectServer(".", "rootcimv2") Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem") For Each objItem in colItems DataArea.InnerHTML = objItem.Caption Next End Sub </script>
Как вы можете видеть, это очень похоже выглядит на наш предыдущий гаджет. Фактически здесь только два отличия:
• Мы удалили кнопку из гаджета. Это означает что больше не нужно щелкать что-либо (это означает в данном случае, что теперь вообще нет нечего почему можно щелкать).
• Мы добавили подпрограмму Window_OnLoad.
Как вы конечно знаете, подпрограмма Window_Onload, когда оно включена в веб-страницу, создается для запуска ее каждый раз когда веб-страница загружается или обновляется. Эта подпрограмма функционирует точно также когда она включена в гаджет: она автоматически запускается каждый раз когда гаджет загружается. Вот как мы создали самозапускающийся (auto-run) гаджет: мы прогто создали подпрограмму с именем Window_OnLoad и поместили в нее код который должен выполнятся при запуске процедуры.
Для этого гаджета наша подпрограмма Window_OnLoad выглядит так:
Sub Window_OnLoad RunSub End Sub
Как вы можете видеть, все что мы делаем в этой подпрограмме это вызываем вторую подпрограмму – RunSub. Обратите внимание, что мы не стали помещать наш код WMI в другую подпрограмму, мы могли бы поместить его прямо в подпрограмму Window_OnLoad и сразу вызывать в момент запуска кода. Так зачем же мы создали лишнюю подпрограмму? Все просто: это позволит нам легче перейти к следующему гаджету.
Чтобы вы могли удивляться, вот на что похож наш «безкнопочный» гаджет.
Создание гаджета типа “Auto-Refresh”
Несомненно, гаджеты заслуживают того, чтобы поддерживать обслуживание огромной части вещей, выступая как устройства мониторинга, покорно сохраняя таблицы чего-либо и всего, что необходимо – от количества свободного места на диске до сетевых соединений и доступной памяти. Гаджеты отлично подходят для таких задач: они малы и ненавязчивы, еще гаджеты могут непрерывно отображать визуальные сигналы которые позволяют окинуть их информацию быстрым взглядом. Также важно, что гаджеты могут быть запрограммированы на определенные действия при возникновении специфических событий. Сочетая в себе малый размер и графические возможности с вашим кодом сприпта, вы можете создавать невероятно полезные средства для мониторинга здоровья и благополучия вашей сети.
Конечно, возможность гаджета делать это в свою очередь зависит от постоянного обновления его информации. Важно что когда гаджет запускается он может пинговать сервер и проверить его доступность. Однако, как средство мониторинга, ваш гаджет может быть использован с большим трудом, если он может пинговать сервер только в момент запуска. Вместо этого, гаджету необходимо периодически обновлять себя: повторять обновление информации через регулярные промежутки времени. Другими словами, ему необходимо делать что-то вроде этого:
<html> <head> <title>My Gadget</title> <style> body{width:120;height:40"} </style> </head> <script language="VBScript"> Sub Window_Onload GetMemory iTimerID = window.SetInterval("GetMemory", 10000) End Sub Sub GetMemory Set objLocator = CreateObject("WbemScripting.SwbemLocator") Set objWMIService = objLocator.ConnectServer(".", "rootcimv2") Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem") For Each objItem in colItems DataArea.InnerHTML = objItem.FreePhysicalMemory Next End Sub </script>
Перед тем как мы обсудим то, как работает данный скрипт, мы должны заметить, что этот простой скрипт не отображает имя установленной операционной системы, вместо этого он отображает количество доступной оперативной памяти компьютера. Почему мы вдруг бросили гаджет, отображающий имя операционной системы, в пользу гаджета с оперативной памятью? Что ж, мы думаем что у вас нет необходимости постоянно отслеживать имя установленной операционной системы; можно говорить, что имя операционной системы не меняется так часто, как количество доступной памяти. Мы имеем в виду, что мониторинг доступной памяти может быть немного более реалистичным, чем мониторинг имени установленной операционной системы.
В данном случае подпрограмма для определения текущего объема доступной оперативной памяти (подпрограмма названная GetMemory) выглядит так:
Sub GetMemory Set objLocator = CreateObject("WbemScripting.SwbemLocator") Set objWMIService = objLocator.ConnectServer(".", "rootcimv2") Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem") For Each objItem in colItems DataArea.InnerHTML = objItem.FreePhysicalMemory Next End Sub Однако, для нас здесь интересна не подпрограмма GetMemory , но подпрограмма Window_OnLoad:
Sub Window_Onload GetMemory iTimerID = window.SetInterval("GetMemory", 10000) End Sub
Как вы можете видеть, мы делаем две вещи в этой подпрогрпмме. Во-первых, мы вызываем подпрограмму GetMemory , мы делаем это для того, чтобы быть уверенными, что при загрузке гаджета объем доступной памяти будет отображаться в нашем гаджете. Вторая вещь которую мы делаем немного более интересная:
iTimerID = window.SetInterval("GetMemory", 10000)
В данной строке кода мы используем метод SetInterval для создания таймера. Все что делает этот таймер, это вызывает подпрограмму GetMemory каждые 10 секунд (10 000 миллисекунд). Это то, как мы добивается самообновления нашего гаджета: каждые 10 секунд гаджет вызывает подпрограмму GetMemory , что означает, что каждые 10 секунд гаджет использует WMI для получения текущего количества доступной оперативной памяти и, затем, отображает эти данные в теле гаджета. Если 10 секунд между измерениями это слишком долго, тогда измените параметр 10000 на меньшее число, например, установка значения параметра 5000 будет означать, что гаджет будет обновляться каждые 5 секунд (5000 миллисекунд). Подобно этому, измените 10000 на большее число если вы предпочитаете иметь более длинный интервал между измерениями.
Вот наш гаджет в действии:
Мы никогда не говорили что это была красивая работа. Но теперь, когда вы понимаете основы создания гаджетов (в особенности, гаджетов интересных системным администраторам) мы почти готовы создавать красивые гаджеты. Скоро мы поговорим о включении графики в гаджеты, мы также изучим объектную модель гаджетов (Gadget object model) и некоторые из действительно интересных вещей, которые вы можете со всем этим делать.
Обзор будущих «вкусностей»
Для того, чтобы вы ощутили вкус того что могут делать гаджеты, вот слегка (с ударением на слове слегка) более сложный гаджет, он один делает две вещи: он отслеживает количество доступной памяти и также отображает (в веб-странице) более детальную информацию о системе когда нажата кнопка Information (Информация). Излишне говорить, что это всего лишь царапина на поверхности того, что гаджеты могут делать, но это дает вам более полное ощущение возможностей, которые могут быть включены в один единственный гаджет.
Вы можете сами разобраться в том, как и почему работает этот простой гаджет (мы уже и так вышли за рамки в этом месяце), но вот код:
<html> <head> <title>My Gadget</title> <style> body{width:120;height:80} </style> </head> <script language="VBScript"> Sub Window_Onload GetMemory iTimerID = window.SetInterval("GetMemory", 10000) End Sub Sub GetMemory Set objLocator = CreateObject("WbemScripting.SwbemLocator") Set objWMIService = objLocator.ConnectServer(".", "rootcimv2") Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem") For Each objItem in colItems DataArea.InnerHTML = objItem.FreePhysicalMemory Next End Sub Sub RunSub Set objLocator = CreateObject("WbemScripting.SwbemLocator") Set objWMIService = objLocator.ConnectServer(".", "rootcimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_ComputerSystem") For Each objItem in colItems strHTML = "Computer Name: " & objItem.Name & "<br>" strHTML = strHTML & "User Name: " & objItem.UserName & "<br><br>" Next Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem") For Each objItem in colItems strHTML = strHTML & "Operating System: " & objItem.Caption & "<br>" strHTML = strHTML & "Service Pack: " & objItem.ServicePackMajorVersion & "<br><br>" Next
Set colItems = objWMIService.ExecQuery("Select * From Win32_Processor") For Each objItem in colItems strHTML = strHTML & "Processor: " & objItem.Caption & "<br><br>" Next
Set colItems = objWMIService.ExecQuery ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True") For Each objItem in colItems strHTML = strHTML & objItem.Caption & "<br>" For Each strAddress in objItem.IPAddress strHTML = strHTML & "IP Address: " & strAddress & "<br>" Next Next