Плагин win2tray.spf

Файл: win2tray.spf
Автор: Nicholas Nemtsev
Описание: Дополнительные слова для работы с иконками в системном трее: они позволяют сворачивать в трей конкретное окно или все окна, подпадающие под указанную маску; узнавать, свернуто ли окно в трей; добавлять произвольные иконки в системный трей (а также модифицировать и удалять их); наглядно иллюстрировать с помощью иконок в системном трее доступность/недоступность интернет сайтов и т. д.

Новые слова:


WIN-TO-TRAY: "win_pattern"

Помещает окно, подпадающее под указанную маску в системный трей.
Перед WIN-TO-TRAY можно указывать модификатор ALL: тогда в трей будут убраны все окна, подпадающие под маску.

Примеры:

\ убираем в трей окно ИЕ
WIN-TO-TRAY: "*Internet Explorer"
\ убираем в трей все открытые окна ИЕ
ALL WIN-TO-TRAY: "*Internet Explorer"

Существует вариант этого слова с постфиксным расположением параметров:

S" win_pattern" WIN-TO-TRAY


ADD-TI ( a u hicon -- id )

С помощью этого постфиксного слова вы можете добавить в системный трей произвольную иконку и указать текст, который должен появляться при наведении курсора мыши на эту иконку.

Аргументами к слову ADD-TI служат: строка, которая будет появляться в подсказке при наведении указателя мыши на иконку в трее и т. н. icon handle, т. е., собственно, сама иконка, которая должна появиться в трее. Чтобы создать icon handle вы можете "подгрузить" иконку из файла:

S" iconname.ico" LoadIcon

или воспользоваться одной из многочисленных констант Windows:

32512 0 LoadIconA

Вот числовые значения нескольких иконок-констант Windows, которые вы можете использовать в своих целях:

IDI_APPLICATION 32512
IDI_ERROR 32513
IDI_QUESTION 32514
IDI_WARNING 32515
IDI_ASTERISK 32516

Слово ADD-TI возвращает ID созданной иконки, используя который вы в дальнейшем сможете удалить или изменить ее (см. DEL-TI, MODIFY-TI)

Пример:

#( test_long_proc
NoActive
VARIABLE icon_id
Action:
    \ создаем иконку в трее (IDI_WARNING)
    S" nnCron: long process started" 32515 0 LoadIconA ADD-TI
    \ сохраняем ID иконки в переменную
    icon_id !
    \ ... working
    \ удаляем иконку из трея
    icon_id @ DEL-TI
)# 

См. также примечание.


DEL-TI ( id -- )

Это постфиксное слово позволяет удалять созданную предварительно иконку из системного трея. В качестве аргумента для слова DEL-TI используется ID иконки, получаемый при ее создании.

Пример:

#( test_icon
\ создаем иконку в системном трее
\ (подгружаем иконку из указанного файла)
NoActive
VARIABLE my_icon_id
Action:
    S" New Icon" S" ico\my_icon.ico" LoadIcon ADD-TI
    my_icon_id !
    \ ... working
    \ удаляем иконку из системного трея
    my_icon_id @ DEL-TI
)#

Примечание: удалять иконку из трея имеет смысл в той же задаче, в которой она была создана: добавленная иконка существует, пока жив
поток, который её создал. Если задача, которая создала иконку, завершилась, то иконка становится своеобразным фантомом, который исчезнет при проведении курсора мыши над системным треем. Впрочем, добавить иконку в трей можно и в главном потоке (из nncron.ini), Тогда ее можно будет удалять из любой задачи.


MODIFY-TI ( a u hicon id -- )

Это постфиксное слово используется для изменения уже существующей иконки в системном трее или для смены текстовой строки, которая появляется при наведении курсора мыши на эту иконку.

Аргументами к слову MODIFY-TI служат: строка, которая будет появляться в подсказке при наведении указателя мыши на иконку в трее, icon handle, и ID иконки.

Пример:

#( test_tray_icons
NoActive
VARIABLE tray_icon_id
Action:
    \ создаем иконку в трее (IDI_APPLICATION)
    S" nnCron: task started" 32512 0 LoadIconA ADD-TI
    \ сохраняем ID созданной иконки
    tray_icon_id !
    \ ... выполняем работу
    \ ... меняем иконку в трее (IDI_WARNING)
    S" nnCron: task continued" 32515 0 LoadIconA
    tray_icon_id @ MODIFY-TI
    \ ... выполняем работу
    \ удаляем иконку из трея
    tray_icon_id @ DEL-TI
)#

ADD-HOST ( a u -- )

Это слово добавляет в системный трей иконку, которая наглядно отображает - доступен ли сейчас указанный вами интернет-сайт или компьютер в локальной сети. Иконка будет меняться в зависимости от доступности () или недоступности () указанного сайта. Сайт считается доступным, если он пингуется. Удерживая курсор мыши над иконкой, можно вывести подсказку с именем сайта. Иконка доступности/недоступности сайта будет автоматически удалена из системного трея при выходе из nnCron. Для принудительного удаления иконки из трея используйте слово DEL-HOST-ICONS.

Пример:

#( test_add-host
WatchLogon: "*"
Action:
    S" strauss" ADD-HOST
    S" www.nncron.ru" ADD-HOST
)#

DEL-HOST-ICONS

Это слово удаляет из системного трея все иконки доступности/недоступности сайтов, добавленные с помощью слова ADD-HOST.

Пример:

#( test_del-host-icons
WatchLogoff: "*"
Action:
    DEL-HOST-ICONS
)#

IN-TRAY? ( hwnd -- ? )

Позволяет узнать - свернуто ли указанное окно в системный трей.
Слово IN-TRAY? принимает в качестве аргумента window handle нужного окна и возвращает флаг: TRUE (-1) если окно свернуто в трей и FALSE (0) в противном случае.

Пример:

#( test_in_tray
NoActive
Action:
    \ запускаем Notepad
    START-APP: notepad.exe
    PAUSE: 1000
    \ получаем window handle Notepad
    WIN-EXIST: "*Notepad"
    IF
        \ проверяем: свернуто ли окно Notepad в трей
        WIN-HWND IN-TRAY?
        IF
            MSG: "Notepad is minimized to tray"
        ELSE
            MSG: "Notepad is not minimized to tray"
        THEN
        \ сворачиваем окно Notepad в трей
        WIN-TO-TRAY: "*Notepad"
        PAUSE: 1000
        \ еще раз проверяем: свернуто ли окно Notepad в трей
        WIN-HWND IN-TRAY?
            IF
                MSG: "Notepad is minimized to tray"
            ELSE
                MSG: "Notepad is not minimized to tray"
            THEN
    THEN
)#

TRAY-LIST

Список window handle окон, которые были свернуты в трей. Работа со списками подробно рассмотрена в разделе "Неотложная помощь по Форту".