Лог на фоне рабочего стола

Просто демонстрации как работают те или иные действия или события
Ответить
Аватара пользователя
LizardOfOzz
Гвардии пилот - Наставник
Сообщения: 1165
Зарегистрирован: Пт сен 08, 2006 8:59 pm
Благодарил (а): 8 раз
Поблагодарили: 38 раз
Контактная информация:

Лог на фоне рабочего стола

Сообщение LizardOfOzz » Пт май 16, 2008 9:35 pm

Итак, данная задача выводит последние N строк файла в качестве фона рабочего стола.

Я знаю что есть тьма специальных прог, но мне просто было интересно написать такую задачу. Кроме того, я верю что многим пригодится маленький кусочек этой задачи - извлечение последних N строк из файла.

Сама задача очень проста и состоит из нескольких групп действий:
1. Сначала происходит установка всех необходимых переменных.
2. Затем извлечение последних N строк из лог-файла.
3. При помощи IrfanView извлечённые строки печатаются в bmp-файл и этот файл устанавливается фоном рабочего стола.

Задача нормально работает в WinXP Pro SP2, xStarter-1.9.1.87
Вложения
BackgroundInfo.xstk
(9.15 КБ) 1215 скачиваний
За это сообщение автора LizardOfOzz поблагодарил:
Alex (Пт май 16, 2008 9:35 pm)
Рейтинг: 33.33%
Изображение Изображение

Аватара пользователя
LizardOfOzz
Гвардии пилот - Наставник
Сообщения: 1165
Зарегистрирован: Пт сен 08, 2006 8:59 pm
Благодарил (а): 8 раз
Поблагодарили: 38 раз
Контактная информация:

Re: Лог на фоне рабочего стола

Сообщение LizardOfOzz » Пн сен 15, 2008 7:34 pm

Для тех, кто сам не разобрался, дополнение: при выполнении задачи предполагается, что существует некий bmp-файл "[bmpfile].new" на фоне которого и выводится текст.

P.S.: Не понимаю, зачем надо было спрашивать в личке. Я ж могу и не заметить письма...
Изображение Изображение

balu
Пассажир
Сообщения: 13
Зарегистрирован: Вт авг 28, 2007 8:23 am
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Лог на фоне рабочего стола

Сообщение balu » Вт сен 16, 2008 11:40 am

Спасибо, что быстро откликнулись. Но, к сожалению у меня все равно не получилось запустить задачу. :( Итак снова опишу мои действия по порядку, возможно, что где-то я сам ошибаюсь.
1. Скачал и установил саму задачу с форума.
2. Скачал и установил IrfanView
3. Создал в С папку playground
4. В действии "Прочитать из Лог файла1" указал путь к логфайлу.
5. В действии "Отрисовка текста в бмп" указал путь к начальному чистому бмп файлу
6. Запустил задачу....
Результат. Комп пошуршал винтом, сменил картину рабочего стола на другую и все...
Никаких логов и строк на фоне. В папке playground появился файл background.bmp и больше ничего. В логе самой задачи - все чисто выполнено, без ошибок. Где еще может надо чего-то указывать?

Аватара пользователя
LizardOfOzz
Гвардии пилот - Наставник
Сообщения: 1165
Зарегистрирован: Пт сен 08, 2006 8:59 pm
Благодарил (а): 8 раз
Поблагодарили: 38 раз
Контактная информация:

Re: Лог на фоне рабочего стола

Сообщение LizardOfOzz » Ср сен 17, 2008 7:38 am

balu писал(а):Спасибо, что быстро откликнулись. Но, к сожалению у меня все равно не получилось запустить задачу. :( Итак снова опишу мои действия по порядку, возможно, что где-то я сам ошибаюсь.
1. Скачал и установил саму задачу с форума.
2. Скачал и установил IrfanView
3. Создал в С папку playground
4. В действии "Прочитать из Лог файла1" указал путь к логфайлу.
5. В действии "Отрисовка текста в бмп" указал путь к начальному чистому бмп файлу
6. Запустил задачу....
Результат. Комп пошуршал винтом, сменил картину рабочего стола на другую и все...
Никаких логов и строк на фоне. В папке playground появился файл background.bmp и больше ничего. В логе самой задачи - все чисто выполнено, без ошибок. Где еще может надо чего-то указывать?
А в файле background.bmp строки лога отрисованы?

4 и 5 пункты лишние. настраивать задачу надо при помощи переменных, иначе легко можно наделать ошибок.
Изображение Изображение

balu
Пассажир
Сообщения: 13
Зарегистрирован: Вт авг 28, 2007 8:23 am
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Лог на фоне рабочего стола

Сообщение balu » Ср сен 17, 2008 7:51 pm

нет, отрисованных строк в созданном бмп нет.
Поступил так: просто взял текстовый файл, поместил в каталог playground и переименовал его в background.txt. Теперь то правильно? Насчет указания пути к начальному чистому файлу бмп я не понял - как и где тогда его указывать, создавать переменную новую что ли? а разве если я просто вместо [bmpfile].new в этом окошке пишу путь к файлу с/каталог/файл, это не правильно? в логах задачи (подробных) - ни единой ошибки все "запущено" и "успешно выполнено". Может в irfane надо настройки какие-то еще писать? кстати irfan свежий и стартер веб пилот свежий. И еще в корневом каталоге irfan есть файл .ini, открыл его блокнотом, и там в строке add text увидел последнюю строчку из своего лога! значит задача читает лог и совершает с ним операцию в irfan, однако получающийся bmp чист.
Последний раз редактировалось balu Ср сен 17, 2008 8:36 pm, всего редактировалось 2 раза.

Аватара пользователя
LizardOfOzz
Гвардии пилот - Наставник
Сообщения: 1165
Зарегистрирован: Пт сен 08, 2006 8:59 pm
Благодарил (а): 8 раз
Поблагодарили: 38 раз
Контактная информация:

Re: Лог на фоне рабочего стола

Сообщение LizardOfOzz » Ср сен 17, 2008 7:55 pm

А переменная [txtfile] для чего?
Изображение Изображение

balu
Пассажир
Сообщения: 13
Зарегистрирован: Вт авг 28, 2007 8:23 am
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Лог на фоне рабочего стола

Сообщение balu » Ср сен 17, 2008 8:29 pm

LizardOfOzz писал(а):А переменная [txtfile] для чего?
дык делал я сначала так. и сейчас сделал вроде... насчет bmp чистого, где путь указывать?

balu
Пассажир
Сообщения: 13
Зарегистрирован: Вт авг 28, 2007 8:23 am
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Лог на фоне рабочего стола

Сообщение balu » Чт сен 18, 2008 7:12 pm

LizardOfOzz писал(а):Для тех, кто сам не разобрался, дополнение: при выполнении задачи предполагается, что существует некий bmp-файл "[bmpfile].new" на фоне которого и выводится текст.
Вот здесь я путь к бмп файлу и указываю. В результате фон рабочего стола меняется на этот самый файл и все. Созданный [bmpfile] чист. Не пинайте меня сильно ногами, но я вообще не понял, как [bmpfile].new забирается на обработку в irfan. Ведь именно этот файл теоретически обрабатываться должен ifran и копироваться в просто [bmpfile], который в свою очередь в последнем действии задачи выводится в качестве фона. Так что делать? помогите плиз, уж нужна очень ваша задачка, весьма полезная для меня... :)

Аватара пользователя
yarunya
Ас
Сообщения: 143
Зарегистрирован: Чт авг 28, 2008 1:09 pm
Откуда: Украина
Благодарил (а): 5 раз
Поблагодарили: 4 раза
Контактная информация:

Re: Лог на фоне рабочего стола

Сообщение yarunya » Сб фев 14, 2009 3:57 pm

Интересная задача! У меня есть большая просьба: LizardOfOzz можешь как-то обновить данную тему, для более подробного описания задачи... Я конечно умственно не слаб, но толком понять так и не смог, что к чему. Ведь с помощью такой задачи можно создавать целые статистические обои! Заранее благодарен...
С ув. Y@runya.

Изображение

Аватара пользователя
LizardOfOzz
Гвардии пилот - Наставник
Сообщения: 1165
Зарегистрирован: Пт сен 08, 2006 8:59 pm
Благодарил (а): 8 раз
Поблагодарили: 38 раз
Контактная информация:

Re: Лог на фоне рабочего стола

Сообщение LizardOfOzz » Сб фев 14, 2009 4:14 pm

yarunya писал(а):Интересная задача! У меня есть большая просьба: LizardOfOzz можешь как-то обновить данную тему, для более подробного описания задачи... Я конечно умственно не слаб, но толком понять так и не смог, что к чему. Ведь с помощью такой задачи можно создавать целые статистические обои! Заранее благодарен...
А какая часть алгоритма не понятна?
Изображение Изображение

Аватара пользователя
yarunya
Ас
Сообщения: 143
Зарегистрирован: Чт авг 28, 2008 1:09 pm
Откуда: Украина
Благодарил (а): 5 раз
Поблагодарили: 4 раза
Контактная информация:

Re: Лог на фоне рабочего стола

Сообщение yarunya » Сб фев 14, 2009 4:21 pm

Я так понял... Ирфан как-то обрабатывает свой ини, и при создании рисунка вписывает в него данные из него? Мы просто подставляем свои значения? Как называется раздел в котором будет текст? Не 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
С ув. Y@runya.

Изображение

Аватара пользователя
LizardOfOzz
Гвардии пилот - Наставник
Сообщения: 1165
Зарегистрирован: Пт сен 08, 2006 8:59 pm
Благодарил (а): 8 раз
Поблагодарили: 38 раз
Контактная информация:

Re: Лог на фоне рабочего стола

Сообщение LizardOfOzz » Сб фев 14, 2009 10:44 pm

Итак, ещё раз, подробно и по-порядку. Решил повторить все этапы с нуля, благо под рукой была чистая система.
  • Приготовления.
    • Ставим стартер.
    • Ставим 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
    Вложения
    BackgroundInfo2.xstk
    (15.73 КБ) 779 скачиваний
    Изображение Изображение

    Аватара пользователя
    LizardOfOzz
    Гвардии пилот - Наставник
    Сообщения: 1165
    Зарегистрирован: Пт сен 08, 2006 8:59 pm
    Благодарил (а): 8 раз
    Поблагодарили: 38 раз
    Контактная информация:

    Re: Лог на фоне рабочего стола

    Сообщение LizardOfOzz » Сб фев 14, 2009 10:44 pm

    А вот логика работы:

    В первой части просто проверяются некоторые переменные. Сказывается программистское прошлое... =)
    -------------------------------------------------------------------------------------------------------------------------------------------------
    Во второй части извлекаются последние N строк файла и пихаются в текстовую переменную.
    Тут надо учесть следующие моменты:
    • Насколько я понимаю, действие "ReadFromLog" загружает файл в память. А т.к. без ротации логи легко достигают гигабайтных размеров, это может стать проблемой. Решение - искать аналог программы tail из unix.
    • В зависимости от того, что написано в "SetVariable6", строки могут отображаться в прямом и обратном порядке.

      Прямой порядок:

      Код: Выделить всё

      [GetTextBlockN1.TextBlock][ENTER][text]
      Обратный порядок (удалять первую пустую строку мне было лень):

      Код: Выделить всё

      [text][ENTER][GetTextBlockN1.TextBlock]
    Алгоритм работы такой:
    • Читаем лог-файл
    • Считаем сколько в нём строк
    • Дальше идёт реализация цикла for-to-do на основе цикла while-not:
      Сначала инициализация переменных.
      Тело цикла:
      • Вычисление номера очередной строки. Т.к. параметр цикла (i) возрастает, строки извлекаются в обратном порядке.
      • Добавление очередной строки в переменную text.
      • Вычисление следующего значения параметра цикла.
      • Запись этого значения в переменную. (иногда мне кажется, что после стартера можно смело садиться за asm. вот только регистры выучить надо)
      • Проверка условия выхода из цикла (i >= N). Больше либо равно тут из-за того, что i инициализируется нулём. Что, в свою очередь, нужно для того, чтобы корректно вычислялся индекс самой последней строки (который равен количеству строк минус ноль).
    Цикл можно было сделать красивее и эффективнее, но это не учебник по программированию. =)
    ----------------------------------------------------------------------------------------------------------------------------------------------------
    Третья секция - отрисовка строк.
    • Вычисление базовой директории для экзешника iview.
    • Очистка файла. Просто копируем поверх чистую картинку.
    • Для каждой строки из переменной text делаем следующее:
      • Записываем текст строки в инишку IrfanView
      • Вычисляем координаты надписи.
        • Индекс строки - 1 (это значение пригодится чуть позже)
        • Индекс строки * высота строки = нижняя граница прямоугольной области с текстом.
        • (Индекс строки - 1 ) * высота строки = верхняя граница прямоугольной области с текстом.
        • X + W = правая граница прямоугольной области с текстом. По-хорошему, это действие надо вынести за цикл. При этом X - левая граница бла-бла-бла.
      • Записываем эти координаты в инишку.
      • Запускаем irfanview с тем, чтобы он отрисовал очередную строку.
    • Теперь заставляем irfanview обновить обои рабочего стола.
    За это сообщение автора LizardOfOzz поблагодарили (всего 2):
    Anton5 (Сб фев 14, 2009 10:44 pm) • yarunya (Сб фев 14, 2009 10:44 pm)
    Рейтинг: 66.67%
    Изображение Изображение

    Аватара пользователя
    yarunya
    Ас
    Сообщения: 143
    Зарегистрирован: Чт авг 28, 2008 1:09 pm
    Откуда: Украина
    Благодарил (а): 5 раз
    Поблагодарили: 4 раза
    Контактная информация:

    Re: Лог на фоне рабочего стола

    Сообщение yarunya » Пн фев 16, 2009 12:13 pm

    Очуметь, как понятно! :)
    Огромное спасибо, за такой труд!
    С ув. Y@runya.

    Изображение

    Anton5
    Командир экипажа
    Сообщения: 80
    Зарегистрирован: Вт июн 17, 2008 8:04 am
    Благодарил (а): 5 раз
    Поблагодарили: 0

    Re: Лог на фоне рабочего стола

    Сообщение Anton5 » Ср июл 15, 2009 12:25 am

    Попрбовал записать в лог файл русский текст, он не выводится. Если писать по английски, то всё отлично работает.

    Такой глюк только уменя или выводить русский текст неполучится?

    Ответить