Гаджет для windows sidebar

Недавно мне понадобилось создать гаджет для Windows Sidebar. Навыков в этом у меня не было, поэтому, немного погуглив и почитав документацию, приступаем.

Сразу покажу то, что получилось в итоге

Гаджет будет получать информацию с сайта в виде xml, парсить и, собственно, отображать. Также гаджет будет проверять наличие новых версий, и в случае их присутствия, отказываться работать :)
Изначально, ради получения опыта, хотел написать гаджет полностью на VBScript (так как с ним еще не имел дела), но в конечном итоге пришлось делать вставки на JavaScript.
Перейдем непосредственно к коду. Весь код здесь я рассматривать не буду, покажу лишь основные моменты. Ссылка на готовый гаджет – в конце статьи.
Главный файл гаджета – его манифест – файл Gadget.xml. Он должен называться именно так и располагаться в корне нашего архива (гаджет есть ни что иное, как архив ZIP с расширением .gadget).

<?xml version="1.0" encoding="utf-8" ?>
<gadget>
 <name>Weather from Info.Denms.Ru</name>
 <version>1.0.1232</version>
 <hosts>
  <host name="wdenms">
   <base type="HTML" apiVersion="1.0.0" src="main.html" />
   <permissions>Full</permissions>
   <platform minPlatformVersion="1.0" />
  </host>
 </hosts>
  <icons>
    <icon width="64" height="64" src="icon.png" />
  </icons> 
 <author name="cvs">
  <info url="http://info.denms.ru" />
 </author>
 <description>Weather Widget (Info.Denms.Ru)</description>
</gadget>

Рассмотрим его более подробно.
Элемент <base> должен содержать apiVersion, равный 1.0.0 (на данный момент), а также атрибут src, в котором указан главный файл нашего гаджета;
<permissions> — разрешения для гаджета. Устанавливаем равным full;
<platform> — минимальная версия Widows Sidebar. На данный момент – 1.0;
Параметры <name> — имя гаджета, <version> — версия, <author> — информация об авторе, <info> — ссылка на страницу с гаджетом, <icon> — иконка гаджета и <descrtiption> будут отображаться на панели установленных гаджетов.

Файл main.html – обычный html файл, приводить его полностью не буду, остановлюсь лишь на некоторых моментах.
С помощью элемента g:background задается фон гаджета. Сделаем его прозрачным.

<g:background id="background" style="position:absolute; z-index:-1; top:0; left:0;" opacity="0"></g:background>

Гаджет может находиться в двух состояниях – docked (слева на скрине выше), и undocked (справа). Будем хранить текущее состояние гаджета в переменной JavaScript docked.

<SCRIPT Language="VBScript">
'Вызов функции JavaScript из области VBS
function isDocked
    isDocked = isDockedJS()
End Function    
</script>
<script src="main.vbs" type="text/vbscript"></script>

<SCRIPT Language="JavaScript">
    docked = 0;
    function isDockedJS() { 
      return docked;
    }
</SCRIPT>
<script type="text/javascript" src="main.js"></script>

Функция-обертка isDocked потребуется нам в дальнейшем, чтобы из VBScript узнать текущее состояние гаджета (как я не старался, но реализовать это на чистом VBScript не смог). Еще одно замечание – скрипты корректно работают именно в этом порядке, т.е. сначала описываем скрипты VBScript, потом JavaScript.

Остальные элементы в main.html представлены элементами DIV с абсолютным позицированием. Впоследствии из скриптов мы будем обращаться к ним по их id.

  <div id="small_needupdate"></div>

С помощью JavaScript зададим состояния docked и undocked для гаджета, а так же укажем файл настроек (main.js)

System.Gadget.onDock = resize;
System.Gadget.onUndock = resize;
System.Gadget.settingsUI = "settings.html";
System.Gadget.onSettingsClosed = SettingsClosed;

docked=0; //начальное состояние гаджета
resize(); //инициализация

Как видно из листинга выше, при смене состояний гаджета будет вызываться функция resize().

function resize() {

 bd = document.body.style;
 System.Gadget.beginTransition();

 if (System.Gadget.docked) {
   // small state
    bd.width=148;  //устанавливаем размеры гаджета
    bd.height=201;
    docked = 1;
    bd.background='url(images/gadget.png) no-repeat'; //устанавливаем фон
   //далее следует перенос значений из состояния undocked в docked и обнуление элементов для состояния undocked
    document.getElementById("small_needupdate").innerHTML = document.getElementById("big_needupdate").innerHTML;
   document.getElementById("big_needupdate").innerHTML = "";
   //...
} else {
    // big state
    bd.width=230;
    bd.height=160;
    bd.background='url(images/gadgeth.png) no-repeat';
    docked=0;
    //перенос значений из состояния docked в undocked и обнуление элементов для состояния docked
   document.getElementById("big_needupdate").innerHTML = document.getElementById("small_needupdate").innerHTML;
   document.getElementById("small_needupdate").innerHTML = "";
   //...
}
System.Gadget.endTransition(System.Gadget.TransitionType.morph,1);
}

Также можно описать функцию сохранения настроек. В моем гаджете их нет, но для примера покажу как это делается

function SettingsClosed(event) {
 if (event.closeAction == event.Action.commit) {
  //alert System.Gadget.Settings.readString('test');
 }
}

readString – читает ранее сохраненную строку, writeString, соответственно, записывает.
Методы System.Gadget.beginTransition(); и System.Gadget.endTransition(); нужны для “плавного» изменения размера гаджета. В Windows Seven они игнорируются, но я все же оставил их для обратной совместимости.

Как уже говорилось выше, сервер предоставляет нам информацию о погоде в формате xml.

<?xml version="1.0"?>
<all>
  <day id="today">
  <temp>1.7</temp>
  <cloudyim>41</cloudyim>
  <cloudy>пасмурно</cloudy>
  <air>снег</air>
  <humidity>87</humidity>
  <wind_direction>Ю-З</wind_direction>
  <wind_speed>5</wind_speed>
  <min>-3</min>
  <max>-1</max>
</day>
<day id="ПТ">
  <min>-1</min>
  <cloudyim>26</cloudyim>
  <max>1</max>
</day>
  <day id="СБ">
  <min>-9</min>
  <cloudyim>41</cloudyim>
  <max>0</max>
</day>
…
</all>

Скачивать и парсить xml будем на VBScript.

Sub DownloadXML2
    Set objXML = CreateObject("Microsoft.XmlHttp")
    objXML.Open "GET", "http://info.kovonet.ru/weather.xml", True
    objXML.OnReadyStateChange = GetRef("objXML_onreadystatechange")
    objXML.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
    objXML.Send
    iTimeoutID = window.SetTimeout("mySleep", 1000)
End Sub

Функция mySleep будет проверять наше соединение на таймаут.

Sub mySleep
  if bRespReceived = "false" then 'ответ еще не получен
    iTimeout = iTimeout + 1
    if (iTimeout > 30) then  'таймаут
       timerFirstRun = window.SetTimeout("Update", 60000) 'попытка повторного обновления через минуту
    else 'таймаут еще не достигнут, продолжаем считать секунды
      iTimeoutID = window.SetTimeout("mySleep", 1000)
    end if
   end if
End Sub

В случае успешного скачивания objXML.readyState будет равен четырем, а статус (objXML.status) вернет значение 200.

Function objXML_onreadystatechange()
  If (objXML.readyState = 4) Then
    'msgbox objXML.statusText
    If (objXML.status = 200) Then
      bRespReceived=true
      SaveFile(objXML.responseText)
    else 
      timerFirstRun = window.SetTimeout("Update", 60000) 'попытка повторного обновления через минуту
    End If
  End If
End Function

В этом случае сохраняем файл во временную папку Windows

Function SaveFile(what)
  Set fso = CreateObject("Scripting.FileSystemObject")
  tempFolder = fso.GetSpecialFolder(2)
  filepath = tempFolder+"\weather.xml"
  Dim fso1, tf
  Set fso1 = CreateObject("Scripting.FileSystemObject")
  Set tf = fso1.CreateTextFile(filepath, True, True)  'rewrite, unicode
  tf.Write(what) 
  tf.Close
  ParseXML
End Function

и начинаем парсить файл.

Sub ParseXML
  Set fso = CreateObject("Scripting.FileSystemObject")
  tempFolder = fso.GetSpecialFolder(2)
  filepath = tempFolder+"\weather.xml"
  Set xmlDoc = CreateObject("Msxml2.DOMDocument") 
  xmlDoc.async="false"
  xmlDoc.load(filepath)
  'главная нода – в нашем случае <all>
  Set currNode = xmlDoc.documentElement
  'дни недели – <day>
  Set dayNode = currNode.firstChild
  While Not dayNode Is Nothing
    Set currNode = dayNode.firstChild
    While Not currNode Is Nothing
      if currNode.parentNode.getAttribute("id") = "today" then 'сегодняшний день
      if currNode.nodeName = "temp" then document.getElementById(prefix+"maintemp").innerHTML = currNode.childNodes(0).text+Chr(176)
      'отображаем остальные элементы
    Else 'не сегодняшний день, отображаем более мелко
      '...
    end If
    Set currNode = currNode.nextSibling
    Wend
  Set dayNode = dayNode.nextSibling
Wend
End Sub

Проверка на новые версии производится точно таким же способом.
Не забываем создать файл настроек — settings.html, о существовании которого мы объявили выше.

<html>
 <head>
  <title>Настройки</title>
  <style type="text/css">
  body { width:220px; height:120px; }
  </style>
 </head>
 <body>
  <div style="text-align:center">
   <strong>Weather from Info.Denms.Ru<br/><script type="text/javascript">document.write(System.Gadget.version);</script></strong><br/>
   © cvs, 2011<br/>
   <a href="http://info.denms.ru">http://info.kovonet.ru</a><br/><br/>
  </div>
 </body>
</html>

Вот, собственно, и все. Буду рад, если моя (первая :)) статья оказалась кому-то полезной.

Использованные источники:
http://www.script-coding.com/XMLDOMscripts.html;
http://msdn.microsoft.com/en-us/library/bb508511%28v=VS.85%29.aspx;
VBScript Programmers Reference, 3rd Edition;
ну, и, конечно, http://google.com.

Ссылка на гаджет – http://info.kovonet.ru/test.gadget.

From Wikipedia, the free encyclopedia

Windows Desktop Gadgets

Screenshot of Windows Sidebar, showing the analog clock, picture slideshow, and current weather of Redmond, WA

Developer(s) Microsoft
Operating system Windows XP SP2 or later
Included with
  • Windows Vista and Windows 7
Predecessor Active Desktop
Successor Live Tiles in Windows 8
Type Desktop widget engine

Windows Desktop Gadgets (called Windows Sidebar in Windows Vista) is a discontinued widget engine for Microsoft Gadgets. Desktop Gadgets have been replaced by Windows 10 Taskbar Widgets. It was introduced with Windows Vista, in which it features a sidebar anchored to the side of the desktop. Its widgets can perform various tasks, such as displaying the time and date. In Windows Vista, the widgets are restricted to a sidebar but in Windows 7, they can be freely moved anywhere on the desktop.

Windows Desktop Gadgets was discontinued in Windows 8. The Windows 8 Live Tiles can perform a similar function, but they are only visible when the Start menu is visible. They run in a more restrictive environment, making them less risky, but also less useful for some purposes, like system monitoring.

Windows Sidebar originated in a Microsoft Research project called Sideshow (not to be confused with Windows SideShow). It was developed in the summer of 2000, and was used internally at Microsoft.[1] It included a clock, traffic reports, and IM integration.

Windows Sidebar appeared in build 3683 of Windows Longhorn circa September 2002 and was originally intended to replace the notification area and Quick Launch toolbar in Windows, but these plans were scrapped after the development reset in mid-2004.[2] Windows Sidebar was rebuilt and began to appear in Windows Vista builds in the second half of 2005. Some reviewers and Macintosh enthusiasts have pointed out the Sidebar’s similarities in form and function to Konfabulator (later Yahoo! Widget Engine), which appeared several years previously, and the Dashboard widget engine first included with Apple Inc.’s Mac OS X v10.4, which had been released a few months earlier.

In Windows 7, Windows Sidebar was renamed Windows Desktop Gadgets, and the sidebar itself was not included in Windows 7.

Windows Desktop Gadgets was included in all beta releases of Windows 8 but did not make it to the final release. Instead, on 10 July 2012 (which is in the intervening time between the last beta of Windows 8 and its final release), Microsoft issued security advisory to disable Sidebar and Desktop Gadgets on Windows Vista and 7 because of a security vulnerability that could allow remote code execution.[3]

Windows Desktop Gadgets is a feature of Windows Vista and Windows 7 (excluding the Windows Server family of the operating system). It hosts mini-applications or «gadgets» which are a combination of scripts and HTML code. Their use cases include displaying system time, downloading and displaying RSS feeds, or controlling other software such as Windows Media Player. In Windows Vista, gadgets can run «docked» in the sidebar. In Windows 7, they can «float» anywhere on the desktop. It is also possible to run multiple instances of a gadget simultaneously. Windows Sidebar also works on Windows XP.[4]

Windows Vista ships with eleven gadgets: Calendar, Clock, Contacts, CPU Meter, Currency Conversion, Feed Headlines, Notes, Picture Puzzle, Slide Show, Stocks, and Weather. Several other gadgets available during the beta such as App Launcher, Feed Viewer, Number Puzzle, Recycle Bin and Egg Timer never made it to the final release. Windows 7 adds a Media Center gadget and removes the Contacts, Notes and Stocks gadgets.

Originally, Microsoft provided a link to a web site called Windows Live Gallery where additional Sidebar gadgets that have been created by third-party developers could be downloaded. The site was officially retired on October 1, 2011.[5][6]

  • Microsoft Gadgets
  • Windows SideShow for Device Gadgets
  • Desk accessory
  1. ^ «A Brief History of Windows Desktop Gadgets». Microsoft. September 15, 2005. Archived from the original on 2007-06-21. Retrieved 2007-06-03.
  2. ^ Thurrott, Paul (2002-11-13). ««Longhorn» Alpha Preview». Windows SuperSite. Retrieved 2008-08-18.
  3. ^ Microsoft Security Advisory (2719662): Vulnerabilities in Gadgets Could Allow Remote Code Execution. Technet.microsoft.com. Retrieved on 2013-07-21.
  4. ^ «Windows Sidebar». Microsoft Corporation. Retrieved 2008-09-18.
  5. ^ Looking for gadgets?
  6. ^ «Desktop Gadgets». Microsoft. Archived from the original on 2013-03-27. Retrieved 2013-04-23.
  • Gralla, Preston (2007). «2: Hacking the Interface: by John Moscarillo». Big Book of Windows Hacks. O’Reilly Media. ISBN 978-0-596-55913-7.
  • Shaktov, Mickey; Kohlenberg, Toby (14 July 2012). «We have you by the gadgets: A Security Analysis of the Microsoft Windows Sidebar Gadget Platform» (PDF). Black Hat. UBM.
  • Gadget Corner — official Windows Sidebar and Microsoft Gadgets team blog
  • Windows Sidebar Reference on MSDN


Загрузить Гаджеты для Рабочего стола Windows 7 можно в теме:


[cut=Windows Sidebar или его отсутствие]

Боковая панель была интегрирована в Windows Explorer, то есть в Windows 7 нет той панели, которая была в Windows Vista и к которой было необходимо прикреплять гаджеты. Вместо этого они размещаются по всему рабочему столу и могут быть прикреплены к боковой и верхней границе экрана.

Тем не менее, все гаджеты запускаются в процессе Windows Sidebar, который находится в папке %ProgramFiles%\Windows Sidebar и %ProgramFiles(x86)%\Windows Sidebar (в 64-битной редакции Windows используется 32-битная версия Windows Sidebar).
[/cut]
[cut=Включение Windows 7 Sidebar при выключенном UAC]
(уточню, не столько сайдбар (ее в привычном понимании уже и нет), а работоспособность гаджетов при отключенном UAC)

Примените этот твик реестра:

Код

Windows Registry Editor Version 5.00                        

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Sidebar\Settings]                        
«AllowElevatedProcess»=dword:00000001

Перезагрузитесь.
[/cut]
[cut=Гаджет Weather (Погода) не работает: пишет Service unavailable for your region]

Способ 1:

1. Запустите Диспетчер задач нажатием Ctrl + Shift + Esc
2. Завершите процесс sidebar.exe
3. Запустите Sidebar: правой кнопкой мыши на рабстоле —> Gadgets

Способ 2:

%WINDIR%\system32\driverc\etc
в файл hosts добавить:

Код

207.68.172.246 www.msnweather.com                        
198.78.215.126 blst.msn.com                        
65.55.228.63 weather.msn.com                        
65.55.17.39 weather.service.msn.com

[/cut]
[cut=Удалил Sidebar из автозагрузки. Как восстановить?]

Примените этот твик реестра:

Код

Windows Registry Editor Version 5.00                    

                             [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]                    
«Sidebar»=»C:\Program Files\Windows Sidebar\sidebar.exe /autoRun»

(Замените путь C:\Program Files на Ваш)
[/cut]
[cut=Гаджеты на рабочем столе принимают вид белых квадратиков и перестает запускаться WMP]

Запустите от имени Администратора .cmd файл следующего содержания:

Код

CD %programfiles%\Windows Sidebar
regsvr32 -u sbdrop.dll
regsvr32 -u wlsrvc.dll
regsvr32 atl.dll
regsvr32 sbdrop.dll
regsvr32 wlsrvc.dll
regsvr32 scrrun.dll
regsvr32 jscript.dll
regsvr32 msxml3.dll

Откройте редактор реестра (Пуск —> в строке поиска regedit.exe), перейдите к ветке:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones

и удалите все ключи (папки) кроме числовых.
[/cut]
[cut=После добавления сторонних гаджетов, sidebar.exe не загружается и гаджеты не работают]

Удалите гаджеты из следующих папок:

Код

X:\Program Files\Windows Sidebar\Gadgets
X:\Program Files\Windows Sidebar\Shared Gadgets
X:\Users\Имя пользователя\AppData\Local\Microsoft\Windows Sidebar\Gadgets

(при необходимости сделайте резервную копию)

Где X: — буква диска на который установлена Windows
[/cut]
[cut=Не корректно отображаются и работают гаджеты, не отображаются службы]

Сохраните приведенный ниже код в Блокноте как имя_файла.cmd и запустите от имени Администратора

Код

regsvr32 atl.dll
regsvr32 corpol.dll
regsvr32 dispex.dll
regsvr32 jscript.dll
regsvr32 scrrun.dll
regsvr32 scrobj.dll
regsvr32 vbscript.dll
regsvr32 wshext.dll
regsvr32 wshom.ocx
regsvr32 msxml3.dll
regsvr32 ole32.dll
regsvr32 oleaut32.dll

[/cut]
[cut=Появляется сообщение «Гаджеты рабочего стола управляются системным администратором»]

Примените твик реестра:

Код

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Windows\Sidebar]
«TurnOffSidebar»=-

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Windows\Sidebar]
«TurnOffSidebar»=-

(сохраните как приведенный код в Блокноте как имя_файла.cmd и запустите двойным кликом мыши)

Перезагрузитесь.
[/cut]
[cut=Появляется ошибка «Прекращена работа программы Гаджеты рабочего стола Windows»]

Удалите все из папки:

X:\Users\ИМЯ_ПОЛЬЗОВАТЕЛЯ\AppData\Local\Microsoft\Windows Sidebar\

Где X: — буква диска на который установлена Windows, ИМЯ_ПОЛЬЗОВАТЕЛЯ — имя пользователя под которым был выпонен вход в систему.

После этого сайдбар с гаджетами станут как после установки системы.

[/cut]
[cut=Гаджеты не могут подключиться к интернету, при этом интернет в других приложениях доступен]

Откройте Internet Explorer —> Сервис —> отключите «Работать автономно»

[/cut]
[cut=Отсутствует пункт «Гаджеты» в контекстном меню рабочего стола]

Поставьте галочку:
Пуск —> Панель управления —> Программы и компоненты —> Включение или отключение компонентов Windows —> Платформа гаджетов Windows

[/cut]


↓ Общие рекомендации по восстановлению работоспособности гаджетов: ↓


↓ Как правильно задать вопрос: ↓

Windows Sidebar – это Windows приложение для добавления виджетов на рабочий стол своего ноутбука либо персонального компьютера. В наличии обширная коллекция разнообразных виджетов, включая календарь и прогноз погоды. Имеется возможность регулировать прозрачность окон и иные параметры внешнего вида.

Начало использования

Первым делом человеку потребуется установить утилиту на своё устройство. После этого останется открыть компьютерную программу и приступить к выбору желаемых виджетов. Интерфейс переведён на русский язык, поэтому трудностей в использовании приложения возникнуть не должно.

Виджеты

Программа была создана для предоставления возможности добавлять на рабочий стол различные виджеты. К примеру, пользователь может установить миниатюрное окно с отображением текущей даты и времени, сведений о погоде и так далее. В том числе позволяется добавлять виджеты с показом состояния различных компонентов ноутбука или ПК, включая температуру центрального процессора и загруженность оперативной памяти.

С помощью компьютерной программы юзер может добавлять на экран и более необычные виджеты. Например, пользователю позволяется добавить небольшое окно для игры в шахматы против искусственного интеллекта. Также имеется возможность вынести на рабочий стол заметки с перечнем дел и другими записями. При желании юзер может добавить на экран виджет для управления своим устройством. Благодаря этому появится возможность быстро перезагружать ПК или ноутбук, не открывая меню пуска.

Пользователю разрешается персонализировать доступные в коллекции виджеты. В том числе регулировать их прозрачность, размер и многое другое. При желании можно пополнить каталог программы, скачав из интернета новые виджеты.

Особенности

  • Бесплатная программа с коллекцией виджетов;
  • Поддержка актуальных версий Windows;
  • Возможность персонализации окон;
  • Позволяется добавлять в каталог новые виджеты из интернета.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Windows enable remote desktop connection
  • Grep windows что это
  • Не включается аппаратная виртуализация windows 10
  • Кодовая страница консоли 866 отличается от основной страницы windows 1251 postgresql
  • Samba windows cannot access