среда, 7 августа 2013 г.

Динамические напоминания на рабочих столах


Допустим, есть у нас офис с пользователями )
И надо пользователям что-то напоминать, желательно каждый день. Почту, например, почистить, фильмы в файловом хранилище за собой не оставлять, мониторы выключать, ну, и так далее. Ходить и говорить лично — ну, неспортивно как-то, автоматизаторы мы или нет? На собраниях выступать — тоже что-то не то.

В общем, нужна напоминалка. Я так подумал и решил, 

что наиболее эффективным будет напоминание на рабочем столе, поверх обоев. Ещё, подумал я, было бы неплохо, если бы было несколько разных напоминаний. Полез гуглить, и что ты думаешь, - нет такой программы для офиса! Бесплатной, по крайней мере. Ну, без проблем. Напишем скрипт! А поможет нам в этом прога bginfo http://technet.microsoft.com/en-us/sysinternals/bb897557.aspx , бесплатная, производства нашего любимого Майкрософта.
В оригинале софтина выводит на экран конфигурацию системы, но текст можно задать любой другой, более того — с форматированием. То, что надо.
Запускаем bginfo и пишем важные и нужные напоминания, сохраняем каждое в файл с оригинальным именем или номером.


А сам скрипт примерно такой:

%ECHO OFF

For /F "skip=2 UseBackQ Tokens=3" %%I In (`Reg Query "HKCU\Control Panel\Desktop" /v Wallpaper`) Do IF not "%%I"=="%Temp%\BGInfo.bmp" copy "%%J" "%USERPROFILE%\user_wp.bmp"

В этой строке мы сохраняем оригинальные обои юзера в корень папки юзера. BGINFO добавляет свой текст в bmp-копию оригинальных обоев, а сами обои мы вернем как-нибудь юзеру — не всё же ему напоминать, надо и отдыхать человеку )
/F – это режим работы FOR с текстом (например, с тем, что выводят команды после выполнения)
skip=3 — пропускаем две строки в выводе (у Reg Query вывод длинный, а нам из него нужен только путь к обоям)
UseBackQ — значит, в IN будем давать команду с путем. Путь обычно выделяется двойными кавычками, а команда будет в одинарных. Так мы объясним компу, где у нас что, чтобы он не запутался )
Tokens=3 – тут мы отбираем из вывода Reg Query элемент под номером три, то есть, в нашем случае, путь до обоев. Есть нюанс — если в пути пробелы, то захвачен будет только кусок до первого пробела. В этом случае нужно делать так: Tokens=2*, а потом опрашивать переменную не %I, а %J. Дело вот в чём: звёздочка в нашем случае означает, что будет создана дополнительная переменная к той, которую мы уже завели в FOR. Имя для неё будет сформировано автоматом, по последовательности, то есть если есть А, дальше будет B, после I – J и так далее. И в эту переменную будет помещено вообще всё после второго элемента и до конца, с пробелами или без — пофиг.

Reg Query "HKCU\Control Panel\Desktop" /v Wallpaper

это запрос в реестр, опрашиваем раздел HKCU\Control Panel\Desktop, выясняем, что в ключе Wallpaper

Посмотри схемку, если не очень понятно:



Do IF not "%%I"=="%Temp%\BGInfo.bmp" copy "%%I" "%USERPROFILE%\user_wp.bmp"

Если это не первый запуск программы, или юзер установил новые обои — забэкапим обои в корень %USERPROFILE%. Не забудь поменять I на J, если нужно.

set /A SEED=%RANDOM%
set /A SEED=%SEED%%6

Тут мы генерируем случайное число. %RANDOM% выдает числа от 0 до 65535, нам столько, конечно, не нужно ) . Допустим, нам нужно шесть вариантов. Значит, поделим RANDOM на шесть и возьмём остаток от деления — это можно сделать оператором %. А остаток как раз может быть от 0 до 5 (делим-то на шесть), то есть шесть вариантов


if %SEED% == 0 (
      copy "%USERPROFILE%\user_wp.bmp" "%Temp%\bginfo.bmp"
      exit /b
)

Если 0 — то юзеру повезло! Возвращаем ему его обои безо всяких там напоминаний, и выходим из скрипта.

if %SEED% == 1 (
      bginfo "1.bgi" /nolicprompt /silent /timer 0
      exit /b
)

Если 1, например — выводим напоминание под номером 1.

Выглядит это примерно так:


 
Суть ясна, я так думаю. Приятного использования! ;)

Комментариев нет:

Отправить комментарий