Тема: WSH: WSO — пример работы с иконкой в SystemTray
В библиотеке WindowSystemObject (WSO) есть класс TrayIcon, который создаёт иконку в области SystemTray (около часиков). В документации и примерах нет описания его использования. Восполним данный пробел примером на JScript.
Описание примера:
При сворачивании окна приложения в области SystemTray появляется иконка (кнопка окна на панели задач при этом скрывается). При щелчке на этой иконке окно приложения восстанавливается, а иконка убирается.
Особенности:
1. В объектной модели WSO у класса Form отсутствует событие минимизации окна — используется событие onResize(), при высоте окна меньше 30.
2. При скрытии окна происходит выход из метода Run() — используется цикл по условию наличия форм oWso.Controls.Count. Выход из скрипта при разрушении формы методом Destroy().
var oWso = new ActiveXObject("Scripting.WindowSystemObject")
var cTray = oWso.CreateImageList()
cTray.Height=32
cTray.Width=32
cTray.Load(oWso.LoadImage("c:\\Windows\\winnt.bmp"))
var Tray=oWso.CreateTrayIcon()
Tray.Hint="TrayIcon Test"
Tray.Images=cTray
Tray.ImageIndex=0
Tray.Active=true
var f = oWso.CreateForm(0,0,0,0)
f.Icon="c:\\Windows\\winnt.bmp"
f.Text = "Тест"
f.ClientWidth = 100
f.ClientHeight = 100
f.CenterControl()
f.MaximizeBox =false
f.SizeGrip=true
f.onClose=function(Sender)
{Sender.Destroy()}
f.onResize=function(Sender)
{
if (Tray.Active)
{
Tray.Active=false
}
else if (Sender.Height <30)
{
Tray.Active=true
f.Hide()
}
}
Tray.onClick=function(Sender)
{
f.Show()
f.Restore()
}
f.Show()
Tray.Active=false
while (oWso.Controls.Count)
{
oWso.Run()
WScript.Sleep(100)
}
Автор идеи — badik.