Допустим, есть
у нас офис с пользователями )
И надо пользователям
что-то напоминать, желательно каждый
день. Почту, например, почистить, фильмы
в файловом хранилище за собой не
оставлять, мониторы выключать, ну, и так
далее. Ходить и говорить лично — ну,
неспортивно как-то, автоматизаторы мы
или нет? На собраниях выступать — тоже
что-то не то.
В общем, нужна напоминалка. Я так подумал и решил,
что наиболее эффективным будет напоминание
на рабочем столе, поверх обоев. Ещё,
подумал я, было бы неплохо, если бы было
несколько разных напоминаний. Полез
гуглить, и что ты думаешь, - нет такой
программы для офиса! Бесплатной, по
крайней мере. Ну, без проблем. Напишем
скрипт! А поможет нам в этом прога 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
)
Суть
ясна, я так думаю. Приятного использования!
;)
Комментариев нет:
Отправить комментарий