Страница 1 из 1
Лог на фоне рабочего стола
Добавлено: Пт май 16, 2008 9:35 pm
LizardOfOzz
Итак, данная задача выводит последние N строк файла в качестве фона рабочего стола.
Я знаю что есть тьма специальных прог, но мне просто было интересно написать такую задачу. Кроме того, я верю что многим пригодится маленький кусочек этой задачи - извлечение последних N строк из файла.
Сама задача очень проста и состоит из нескольких групп действий:
1. Сначала происходит установка всех необходимых переменных.
2. Затем извлечение последних N строк из лог-файла.
3. При помощи IrfanView извлечённые строки печатаются в bmp-файл и этот файл устанавливается фоном рабочего стола.
Задача нормально работает в WinXP Pro SP2, xStarter-1.9.1.87
Re: Лог на фоне рабочего стола
Добавлено: Пн сен 15, 2008 7:34 pm
LizardOfOzz
Для тех, кто сам не разобрался, дополнение: при выполнении задачи предполагается, что существует некий bmp-файл "[bmpfile].new" на фоне которого и выводится текст.
P.S.: Не понимаю, зачем надо было спрашивать в личке. Я ж могу и не заметить письма...
Re: Лог на фоне рабочего стола
Добавлено: Вт сен 16, 2008 11:40 am
balu
Спасибо, что быстро откликнулись. Но, к сожалению у меня все равно не получилось запустить задачу.
Итак снова опишу мои действия по порядку, возможно, что где-то я сам ошибаюсь.
1. Скачал и установил саму задачу с форума.
2. Скачал и установил IrfanView
3. Создал в С папку playground
4. В действии "Прочитать из Лог файла1" указал путь к логфайлу.
5. В действии "Отрисовка текста в бмп" указал путь к начальному чистому бмп файлу
6. Запустил задачу....
Результат. Комп пошуршал винтом, сменил картину рабочего стола на другую и все...
Никаких логов и строк на фоне. В папке playground появился файл background.bmp и больше ничего. В логе самой задачи - все чисто выполнено, без ошибок. Где еще может надо чего-то указывать?
Re: Лог на фоне рабочего стола
Добавлено: Ср сен 17, 2008 7:38 am
LizardOfOzz
balu писал(а):Спасибо, что быстро откликнулись. Но, к сожалению у меня все равно не получилось запустить задачу. :( Итак снова опишу мои действия по порядку, возможно, что где-то я сам ошибаюсь.
1. Скачал и установил саму задачу с форума.
2. Скачал и установил IrfanView
3. Создал в С папку playground
4. В действии "Прочитать из Лог файла1" указал путь к логфайлу.
5. В действии "Отрисовка текста в бмп" указал путь к начальному чистому бмп файлу
6. Запустил задачу....
Результат. Комп пошуршал винтом, сменил картину рабочего стола на другую и все...
Никаких логов и строк на фоне. В папке playground появился файл background.bmp и больше ничего. В логе самой задачи - все чисто выполнено, без ошибок. Где еще может надо чего-то указывать?
А в файле background.bmp строки лога отрисованы?
4 и 5 пункты лишние. настраивать задачу надо при помощи переменных, иначе легко можно наделать ошибок.
Re: Лог на фоне рабочего стола
Добавлено: Ср сен 17, 2008 7:51 pm
balu
нет, отрисованных строк в созданном бмп нет.
Поступил так: просто взял текстовый файл, поместил в каталог playground и переименовал его в background.txt. Теперь то правильно? Насчет указания пути к начальному чистому файлу бмп я не понял - как и где тогда его указывать, создавать переменную новую что ли? а разве если я просто вместо [bmpfile].new в этом окошке пишу путь к файлу с/каталог/файл, это не правильно? в логах задачи (подробных) - ни единой ошибки все "запущено" и "успешно выполнено". Может в irfane надо настройки какие-то еще писать? кстати irfan свежий и стартер веб пилот свежий. И еще в корневом каталоге irfan есть файл .ini, открыл его блокнотом, и там в строке add text увидел последнюю строчку из своего лога! значит задача читает лог и совершает с ним операцию в irfan, однако получающийся bmp чист.
Re: Лог на фоне рабочего стола
Добавлено: Ср сен 17, 2008 7:55 pm
LizardOfOzz
А переменная [txtfile] для чего?
Re: Лог на фоне рабочего стола
Добавлено: Ср сен 17, 2008 8:29 pm
balu
LizardOfOzz писал(а):А переменная [txtfile] для чего?
дык делал я сначала так. и сейчас сделал вроде... насчет bmp чистого, где путь указывать?
Re: Лог на фоне рабочего стола
Добавлено: Чт сен 18, 2008 7:12 pm
balu
LizardOfOzz писал(а):Для тех, кто сам не разобрался, дополнение: при выполнении задачи предполагается, что существует некий bmp-файл "[bmpfile].new" на фоне которого и выводится текст.
Вот здесь я путь к бмп файлу и указываю. В результате фон рабочего стола меняется на этот самый файл и все. Созданный [bmpfile] чист. Не пинайте меня сильно ногами, но я вообще не понял, как [bmpfile].new забирается на обработку в irfan. Ведь именно этот файл теоретически обрабатываться должен ifran и копироваться в просто [bmpfile], который в свою очередь в последнем действии задачи выводится в качестве фона. Так что делать? помогите плиз, уж нужна очень ваша задачка, весьма полезная для меня...
Re: Лог на фоне рабочего стола
Добавлено: Сб фев 14, 2009 3:57 pm
yarunya
Интересная задача! У меня есть большая просьба: LizardOfOzz можешь как-то обновить данную тему, для более подробного описания задачи... Я конечно умственно не слаб, но толком понять так и не смог, что к чему. Ведь с помощью такой задачи можно создавать целые статистические обои! Заранее благодарен...
Re: Лог на фоне рабочего стола
Добавлено: Сб фев 14, 2009 4:14 pm
LizardOfOzz
yarunya писал(а):Интересная задача! У меня есть большая просьба: LizardOfOzz можешь как-то обновить данную тему, для более подробного описания задачи... Я конечно умственно не слаб, но толком понять так и не смог, что к чему. Ведь с помощью такой задачи можно создавать целые статистические обои! Заранее благодарен...
А какая часть алгоритма не понятна?
Re: Лог на фоне рабочего стола
Добавлено: Сб фев 14, 2009 4:21 pm
yarunya
Я так понял... Ирфан как-то обрабатывает свой ини, и при создании рисунка вписывает в него данные из него? Мы просто подставляем свои значения? Как называется раздел в котором будет текст? Не
BatchText случайно? Как создать чистый бмпшник? Просто в фотошопе создать пустой док и сохранить его как бмп? Или как-то по-другому...
И что это такое
[bmpfile].new? Откуда он берется... У меня только ошибку выкидает что мол не доступа на запись...
Вот мой ини...
Код: Выделить всё
[Language]
DLL=ENGLISH
Lang=English
[Toolbar]
Skin=Grosberg_24.png
Size=24
[JPEG]
Load Grayscale=0
ExifRotate=1
[PhotoCD]
Loading Size=3
[MultiGIF]
PlayAnimation=1
UseSingleTrans=0
[Viewing]
ShowFullScreen=1
WMult=100
HMult=100
TxtPos=0
TxtAlign=0
FSResample=1
FSAlpha=0
MultimonStretch=0
ShowFullScreenName=1
FullBackColor=0
HideCursor=0
FullText=$D$F $X
TranspText=1
FontColor=65280
TxtBgkr=16777215
FontParam=-13|0|0|0|400|0|0|0|0|1|2|1|49|
Font=Courier
[Others]
PropPage=4
[Open]
OpenIndex=1
OpenDir=D:\!Foto\Home\1\
[WinPosition]
xKoord=0
yKoord=0
Width=1015
Height=870
Maximized=0
Re: Лог на фоне рабочего стола
Добавлено: Сб фев 14, 2009 10:44 pm
LizardOfOzz
Итак, ещё раз, подробно и по-порядку. Решил повторить все этапы с нуля, благо под рукой была чистая система.
- Приготовления.
- Ставим стартер.
- Ставим iview (к сожалению, последние версии iview пытаются поставить вместе с собой панель yahoo. так что обращаем внимание на галочки при установке!).
- Импортируем задачу в стартер.
- Настраиваем задачу под конкретную систему. Переменные я перенёс на вкладку vars.
- Пути:
- [p_iview] - путь до экзешника irfanview, который вызывается в процессе выполнения задачи.
- [p_settings] - путь до файла настроек irfanview. Для добавления текста в картинку используется фича из режима пакетной обработки ирфана.
Поэтому для впечатывания каждой строки приходится отдельно вызывать запуск iview с новыми параметрами в ini-файле.
- [p_logfile] - файл со строками для отображения.
- [p_original] - исходная картинка, в которую будет добавлен текст. При каждом запуске этот файл копируется в [p_result] для сброса изменений, внесённых в прошлый раз.
- [p_result] - файл, который станет фоном рабочего стола.
Параметры:
- [N] - количество строк, которые будут считаны из хвоста лог-файла и отображены на картинке.
- [H] - высота строки. (влияет на расстояние между строками лога на картинке)
- [W] - ширина строки.
- [X] и [Y] - смещение блока текста на картинке. (важно помнить, что эти значения могут отсчитываться от разных углов. зависит от настроек irfanview)
- Надо создать файл, который станет фоном для лога. Я предпочитаю пустую чёрную bmp-шку, размером с рабочий стол по следующим причинам:
- При отображении тратится мало ресурсов системы.
- Нет искажений изображения при многократной обработке файла во время впечатывания в него строк лога.
По идее, файл можно создать любого формата и в любом редакторе (в пределах разумного, конечно). Можно и в iview - вкладка "Изображение\Создать новое (пустое) изображение...."
- Сразу после установки iview в его конфиге нету настроек для пакетного режима. Поэтому задача рисовать ничего не будет.
- Вариант 1 - настроить этот режим вручную.
Меню "Файл\Преобразовать-переименовать группу файлов..."
В открывшемся диалоге ставим галку на "с дополнительными параметрами" и давим на кнопку "параметры" напротив.
Затем, в секции "разное" ставим галку "нанести текст на изображение" и настраиваем параметры текста. Сохраняем. Запускать обработку не надо.
- Вариант 2 - тупо дописать нужную секцию в конфиг:
Код: Выделить всё
[BatchText]
AddText=для проверки
TextCoord=400;60;1000;80;
Corner=0
Orientation=0
TranspText=1
FontColor=65280
TxtBgkr=16777215
FontParam=-13|0|0|0|400|0|0|0|0|1|2|1|49|
Font=Courier
[Batch]
AdvCrop=0
AdvCropX=0
AdvCropY=0
AdvCropW=0
AdvCropH=0
AdvCropC=0
AdvResize=0
AdvResizeOpt=0
AdvResizeW=0.00
AdvResizeH=0.00
AdvResizeL=0.00
AdvResizeS=0.00
AdvResample=0
AdvResizePerc=0
AdvResizePercW=0
AdvResizePercH=0
AdvDPI=0
AdvResizeUnit=0
AdvResizeRatio=0
AdvNoEnlarge=0
AdvCanvas=0
AdvAddText=1
AdvUseBPP=0
AdvBPP=0
AdvUseFSDither=1
AdvAutoRGB=0
AdvHFlip=0
AdvVFlip=0
AdvRLeft=0
AdvRRight=0
AdvGray=0
AdvInvert=0
AdvSharpen=0
AdvGamma=0
AdvContrast=0
AdvBrightness=0
AdvSaturation=0
AdvColR=0
AdvColG=0
AdvColB=0
AdvSharpenVal=1
AdvGammaVal=0.00
AdvContrastVal=0
AdvBrightnessVal=0
AdvSaturationVal=0
AdvColRVal=0
AdvColGVal=0
AdvColBVal=0
AdvDelOrg=0
AdvOverwrite=0
AdvSubdirs=0
AdvSaveOldDate=0
AdvAllPages=1
AdvFineR=0
AdvFineRVal=0.00
AdvBlur=0
AdvBlurVal=1
AdvMedian=0
AdvMedianVal=3
AdvRbg=0
AdvBgr=0
AdvBrg=0
AdvGrb=0
AdvGbr=0
AdvAutoCrop=0
Я подозреваю что не все параметры нужны, но разбираться в них лень.
- Кроме того следует обратить внимание, что изменение этих настроек не отслеживается в задаче, так что при активной работе с iview вполне можно затронуть стиль отображения лога на экране. (например, изменив шрифт и цвет текста в настройках пакетного режима обработки).
Это по поводу юзания....
P.S.: В процессе изучения, задачу я переписал.
Работает в WinXP SP2, xstarter-1.9.2.81, irfanview-4.20
Re: Лог на фоне рабочего стола
Добавлено: Сб фев 14, 2009 10:44 pm
LizardOfOzz
А вот логика работы:
В первой части просто проверяются некоторые переменные. Сказывается программистское прошлое... =)
-------------------------------------------------------------------------------------------------------------------------------------------------
Во второй части извлекаются последние N строк файла и пихаются в текстовую переменную.
Тут надо учесть следующие моменты:
- Насколько я понимаю, действие "ReadFromLog" загружает файл в память. А т.к. без ротации логи легко достигают гигабайтных размеров, это может стать проблемой. Решение - искать аналог программы tail из unix.
- В зависимости от того, что написано в "SetVariable6", строки могут отображаться в прямом и обратном порядке.
Прямой порядок:
Обратный порядок (удалять первую пустую строку мне было лень):
Алгоритм работы такой:
- Читаем лог-файл
- Считаем сколько в нём строк
- Дальше идёт реализация цикла for-to-do на основе цикла while-not:
Сначала инициализация переменных.
Тело цикла:
- Вычисление номера очередной строки. Т.к. параметр цикла (i) возрастает, строки извлекаются в обратном порядке.
- Добавление очередной строки в переменную text.
- Вычисление следующего значения параметра цикла.
- Запись этого значения в переменную. (иногда мне кажется, что после стартера можно смело садиться за asm. вот только регистры выучить надо)
- Проверка условия выхода из цикла (i >= N). Больше либо равно тут из-за того, что i инициализируется нулём. Что, в свою очередь, нужно для того, чтобы корректно вычислялся индекс самой последней строки (который равен количеству строк минус ноль).
Цикл можно было сделать красивее и эффективнее, но это не учебник по программированию. =)
----------------------------------------------------------------------------------------------------------------------------------------------------
Третья секция - отрисовка строк.
- Вычисление базовой директории для экзешника iview.
- Очистка файла. Просто копируем поверх чистую картинку.
- Для каждой строки из переменной text делаем следующее:
- Записываем текст строки в инишку IrfanView
- Вычисляем координаты надписи.
- Индекс строки - 1 (это значение пригодится чуть позже)
- Индекс строки * высота строки = нижняя граница прямоугольной области с текстом.
- (Индекс строки - 1 ) * высота строки = верхняя граница прямоугольной области с текстом.
- X + W = правая граница прямоугольной области с текстом. По-хорошему, это действие надо вынести за цикл. При этом X - левая граница бла-бла-бла.
- Записываем эти координаты в инишку.
- Запускаем irfanview с тем, чтобы он отрисовал очередную строку.
- Теперь заставляем irfanview обновить обои рабочего стола.
Re: Лог на фоне рабочего стола
Добавлено: Пн фев 16, 2009 12:13 pm
yarunya
Очуметь, как понятно!
Огромное спасибо, за такой труд!
Re: Лог на фоне рабочего стола
Добавлено: Ср июл 15, 2009 12:25 am
Anton5
Попрбовал записать в лог файл русский текст, он не выводится. Если писать по английски, то всё отлично работает.
Такой глюк только уменя или выводить русский текст неполучится?