1

Тема: AutoIt: TrayTip — уведомления в System Tray, для пакетных файлов CMD

Утилита выводит всплывающее уведомление (Balloon Tip) в области System Tray. Основное применение — в пакетных файлах. Следует обратить внимание на то, что она не предназначена для ведения логов чего-либо, поскольку на отображение уведомлений накладывается ряд ограничений, в том числе невозможность гарантированно задать точное время отображения уведомления.

Утилита принимает параметры из командной строки:

TrayTip[.exe] <Title> <Text> <Timeout> <Icon>

где:

<Title> — заголовок [1-63 символов];
<Text> — текст сообщения [1-255 символов];
<Timeout> — время отображения [1-30 секунд];
<Icon> — одно из <None|Info|Warning|Error> [без иконки|Информация|Предупреждение|Ошибка].

Пример:

TrayTip Привет "Я Вася" 5 Info

выведет на 5 секунд всплывающее уведомление с заголовком «Привет», текстом «Я Вася» и информационной иконкой.

Все параметры являются обязательными.

Утилита появилась как дополнение к отсутствующей (надеюсь, пока) аналогичной возможности утилиты NirCmd.exe, поэтому она понимает следующие квалификаторы:

в параметре <Title> : ~t, ~q, ~~;
в параметре <Text> : ~t, ~q, ~n, ~~;

где:

~t — табуляция;
~q — двойные кавычки;
~n — новая строка (CrLf);
~~ — тильда ~.

Пример:

TrayTip "Привет ~qВася~q" "Я~t-~t~qПетя~q.~nМне ~~ 8 лет." 10 Warning

При запуске утилита проверяет возможность отображения всплывающих уведомлений путём проверки значения параметра «EnableBalloonTips» подраздела «HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced» (HOW TO: Disable Notification Area Balloon Tips in Windows XP) и, при необходимости, предлагает изменить его.

Утилита является GUI-приложением, поэтому при использовании её в пакетном файле следует помнить: если достаточно просто отобразить уведомление — используется обычный запуск «TrayTip.exe …» (или «start TrayTip.exe …»); если необходимо сделать паузу на заданное время — в пакетном файле используется запуск в виде «start /wait TrayTip.exe …». Также, иногда это может понадобиться, поскольку очередной запуск утилиты пытается очистить своё предыдущее уведомление.

Пример использования в пакетном файле, производящем обновление сведений об оборудовании посредством вызова утилиты devcon.exe:

@echo off

start TrayTip.exe "Rescaning" "Rescaning devices..." 15 Info
"C:\Program Files\DevCon\devcon.exe" rescan > nul
start TrayTip.exe "Rescaning" "Devices rescaning is done" 3 Info

exit /b 0

Во вложенном файле исходный код на языке AutoIt с ресурсами, скомпилированный исполняемый файл и пример командного файла.

Post's attachments

TrayTip.zip 283.88 kb, 619 downloads since 2008-11-23 

You don't have the permssions to download the attachments of this post.

2

Re: AutoIt: TrayTip — уведомления в System Tray, для пакетных файлов CMD

Начиная с версии 2.45 в утилите NirCmd появилась команда trayballoon — отображение всплывающего уведомления (Balloon Tip) в области System Tray. Предлагаю отныне, для целей изложенных в первом посте данной темы, пользовать отныне именно NirCmd с командой trayballoon.

Формат команды

trayballoon [Title] [Balloon Text] [Icon File] [Timeout]

где:
Title — заголовок всплывающего уведомления; может быть пустым (""), при этом подавляется и отображение иконки во всплывающем уведомлении, даже если она задана (в самой области уведомления иконка отображается).
Balloon Text — текст всплывающего уведомления.

В тексте параметров Title (за исключением квалификатора «~n») и Balloon Text могут использоваться обычные квалификаторы строк NirCmd:

~t — табуляция;
~q — двойные кавычки;
~n — новая строка (CrLf);
~~ — тильда ~.

Icon File — путь к файлу иконки или библиотеке, с возможным указанием либо индекса иконки, либо номера ресурса IconGroup (со знаком «-») через запятую. Стандартные иконки могут быть взяты, например, из библиотеки «%SystemRoot%\System32\user32.dll»:

Оповещение — «user32.dll,4» или «user32.dll,-104»
Вопрос — «user32.dll,2» или «user32.dll,-102»
Предупреждение — «user32.dll,1» или «user32.dll,-101»
Ошибка — «user32.dll,3» или «user32.dll,-103»

Timeout — время отображения всплывающего уведомления в миллисекундах; конечно, полагаться на точность здесь не стоит.

Пример, аналогичный первому примеру из предыдущего поста:

nircmd.exe trayballoon "Привет ~qВася~q" "Я~t-~t~qПетя~q.~nМне ~~ 8 лет." "user32.dll,1" 10000

Со вторым примером:

@echo off

start "" nircmd.exe trayballoon "Rescaning" "Rescaning devices..." "user32.dll,4" 15000
"C:\Program Files\DevCon\devcon.exe" rescan > nul
start "" nircmd.exe trayballoon "Rescaning" "Devices rescaning is done" "user32.dll,4" 3000

exit /b 0

не настолько всё гладко, ибо пока что NirCmd не умеет очищать своё собственное выведенное уведомление, а сразу пытается вывести очередное, отображает иконку второго уведомления в области уведомлений и ждёт, пока не будет закрыто («ручками» или по заданному тайм-ауту) имеющееся всплывающее уведомление (созданное либо самим NirCmd, либо системное). Тем не менее, заданное и «отложенное» уведомление в любом случае будет выведено, хоть и не всегда в тот момент, когда это требовалось.