Мир Автомобильных навигаторов

Мир Автомобильных навигаторов (http://4pna.com/index.php)
-   Меню System Information (http://4pna.com/forumdisplay.php?f=40)
-   -   System Information v1.6.3 и её доработка (http://4pna.com/showthread.php?t=12044)

_SIL_ 28.01.2013 12:37

System Information v1.6.3 и её доработка
 
Вложений: 2
Отличие оригинальных версий SystemInformation Menu 1.6.3 и 1.6.1

Наткнулся в инете на новую версию 1.6.3. Особых отличий от 1.6.1 в ней нет. По мелочи кое-что подправлено.
Полный список изменений неизвестен. Мне удалось выявить следующие отличия:
- BackgroundBitmap можно не указывать (поправлен глюк версии 1.6.1).
- запустить программу по относительному пути как обычно нельзя. Напомню, во многих взломанных версиях SI 1.6.1 (взламывали не профи) народ запускал программы по относительному пути не через Command, а через NewIni. Но при этом новый инишник через NewIni не запускался.
- появились новые символы, которые комментируют строку, например "[". Благодаря этому с конфигом стало можно работать как с обычным инишником с блочной структурой.
пример

Для разработчиков это очень полезная фишка. Структуру ини гораздо удобнее читать и генерировать скриптами, работая с конфигом также как с обычным инишником, а не как с текстовым файлом.
Код:

[GLOBALSETTINGS]
GLOBALSETTINGS =
Arrange = No
X = 0
Y = 0
BackgroundBitmap = fon.bmp
....

[Button1]
ICONXPBUTTON =
x = 20
y = 100
IconNormal = Icons\but1_normal.ico
...



Переработанное SystemInfomation menu 1.6.3 с поддержкой картинок PNG с прозрачностью.

Переработка произведена способом [[Ссылки могут видеть только зарегистрированные пользователи. ]]> [[Ссылки могут видеть только зарегистрированные пользователи. ]]>
НОВЫЕ ВОЗМОЖНОСТИ:
  • совместимость с файлами настроек оригинальной программы
  • везде, в любой секции вместо BMP или ICO можно прописывать PNG и JPG (но прозрачность поддерживается только в секции ICONXPBUTTON)
  • в секции GLOBALSETTINGS добавился новый параметр HideTaskBar. Если указать 1, то при запуске менюшки будет скрываться таскбар;
  • в секции ICONXPBUTTON добавил новые параметры Width, Height и Stretch. Теперь можно указывать картинки произвольного размера.
    Параметры SizeNormal и SizePushed как и раньше задают квадратную область для ненажатой и нажатой картинки,
    Параметры Width и Height задают произвольные размеры области сразу для обеих картинок.
    Параметр Stretch=1...5 указывает, что в случае несовпадения реальных размеров картнки с размерами, заданными в конфиге, картинку нужно растянуть/сжать;
  • при отсутствии картинок надписи "no bitmap" и "no icon" теперь не выводятся;
  • в параметре Commnand можно задавать относительный путь для запуска программ. Путь указывается отностельно папки текущего инишника (также как и для картинок или новых инишников);
  • новый параметр Command- (минус на конце) - работает также как Command, только при запуске программы еще будет скрываться таскбар. Если программа по каким-то причинам не запустилась, таскбар скрываться не будет.
  • все сообщения переведены с немецкого на английский язык
  • в секции GLOBALSETTINGS можно задать имя окну менюшки через новый параметр WindowName . Это позволяет из скрипта общаться с менюшкой, например скрывать, отображать, закрываеть окно, посылать комманды и пр. :best:
  • окну SI можно посылать специальную комманду из скриптов для перечитывания конфигурации после правки текущего инишника! Делается это вот так:
    PostMessage("имя окна SI", HexToNumber("8001"), 0, 0 )
    Никаких убийсв процессов или маускликов на спрятанную кнопку больше не нужно!
  • в инишнике можно прописать таблицу, содержащую ссылки на новые инишники, переход по которым можно сделать из скрипта коммандой
    PostMessage("имя окна SI", HexToNumber("8001"), N, 0 )
    где N - число от 1 до 63 - номер инишника по порядку.
    Таблица инишников прописывается сразу после секции [B]GLOBALSETTINGS[/B] в таком виде:
    BUTTON
    NewIni=Test1.ini

    BUTTON
    NewIni=Test2.ini

    BUTTON
    NewIni=Test3.ini

    и так далее. Всего в таблицу можно внести не более 63 инишников, остальные будут игнорироваться.

  • в качестве фоновой картинки можно использовать сразу несколько полупрозрачных картинок и даже скриншот экрана, которые будут накладываться друг на друга. Всего не более 15 картинок включая скриншот. Пользоваться так:
    Картинки:
    BackgroundBitmap = ..\Pics\overlay.png|xx,yy,ww,hh,stretch (после символа | всё указывается без пробелов)
    xx,yy - координата от начала окна. BitmapOffsetX/Y - игнорируется
    ww,hh - ширина и высота картинки (если нужно их изменить)
    stretch=0-5 - аналогично кнопкам - для растягивания/сжатия на новые размеры

    Скриншот:
    BackgroundBitmap = /SCREEN|xx,yy,ww,hh
    если не указывать |xx,yy то нарисуется с корректным смещением когда заданы BitmapOffsetX/Y

    Пример фона из нескольких картинок:
    BackgroundBitmap = /SCREEN
    BackgroundBitmap = ..\res\8x8.png|0,0,480,272,1
    BackgroundBitmap = ..\res\top.png|0,0
    BackgroundBitmap = ..\res\fon.jpg|50,88,366,56
    BackgroundBitmap = ..\res\fon2.png|10,220,460,20,1

    [[Ссылки могут видеть только зарегистрированные пользователи. ]]>
  • У кнопки ICONXPBUTTON появилась текстовая надпись, аналогичная WINDOWSBUTTON!
    У этих двух типов кнопок появились новые параметры:
    TxtOffsetX - отступ по горизонтали, начиная с которого текстовая надпись будет отображаться на кнопке.
    TxtOffsetY - тоже, но по вертикали.
    TxtColor2 - цвет надписи когда кнопка нажата
    Например, чтобы текст был под картинкой, в параметре Height нужно указать число, больше чем высота картинки и задать параметр TxtOffsetY. При этом кнопка будет нажиматься даже при нажатии на текстовую надпись! :best:
    [[Ссылки могут видеть только зарегистрированные пользователи. ]]>
  • В глобальной секции параметром Sound можно задать wav-файл, озвучивающий нажатия кнопок.
  • В секции TIME параметром CloseTimer=(1-255) можно задать количество секунд, через которое менюшка автоматически закроется если не нажимать на экран. При этом на экране будет отображаться обратный отсчет в стандартном формате секции TIME. (см. пример)
  • В секции TIME параметром StartTimer=(0/1) или (yes/no) можно отобразить счетчик секунд с момента старта менюшки.
  • В секции TIME параметром FlashText=(0/1) или (yes/no) можно сделать текст мигающим. Мигание будет с интервлом, заданным через параметр Interval.
  • В любом месте инишника можно прописать секцию END. Это укажет менюшке что всё что написано после этой секции считывать не нужно.
  • При отсутствии файла SysInfoSettings.ini, содержащий список конфигурационных ини-файлов, будет предпринята попытка прочитать ини-конфиг с имененем экзешника. См. Пример 2 в архиве.
  • Чтобы шрифт был сглаженным, нужно указать параметр CreateFont+. Без "+" на конце шрифт будет как и раньше, несглаженный.
    [[Ссылки могут видеть только зарегистрированные пользователи. ]]>

Естественно все эти новые фишки доступны только на навигаторе и не поддерживаются на ПК программой-эмулятором SystemInfomation32.exe.


Картинки ICO и BMP прога загружает своим старым способом. Остальные картинки загружаются системными средствами MS Imaging API. Для этого в системе должны быть библиотеки imaging.dll и zlib.dll. Практчески на всех навиках они сейчас есть.
В архиве Imaging_Install.rar (см. вложения) содержится установочный комплект ImagingApi для любой версии WinCE. Но даже если ImagingApi не поддерживается, то для 24 и 32-битных PNG со сжатем Хоффмана (стандарт фотошопа) в SI присутствует второй способ загрузки PNG, не требующий никаких длл. Этот способ взят c [[Ссылки могут видеть только зарегистрированные пользователи. ]]>


Вам надоели тонны килобайт BMP и ICO, которые занимают ваши менюшки? Тогда мы идем к вам!
[[Ссылки могут видеть только зарегистрированные пользователи. ]]> [[Ссылки могут видеть только зарегистрированные пользователи. ]]>
Что мы имеем в результате в цифрах:
  • fon.bmp=390кб --> fon.jpg=13кб, размер уменьшен в 30 раз;
  • 0.ico=160кб --> 0.png=9кб, размер уменьшен в 18 раз;
  • fon2.bmp=390кб --> fon2.png=4кб, размер уменьшен почти в 100 раз!
А если таких картинок/иконок с полсотни? А если разрешение экрана высокое - 800х480??? Есть повод задуматься.

_RUSER_ 01.12.2013 09:08

_SIL_
А есть версия с поддержкой *.png не упакованная UPX-ом?

LinXP 01.12.2013 09:14

_RUSER_, :shock: ..еще не проснулся?
Код:

upx -d SysInfo+PNG.exe

_RUSER_ 13.12.2013 19:29

_SIL_
На сколько мне известно обновить окно SI с помощью скрипта можно 2-мя способами:
1. Дать команду Run(........"SI.exe") (да, окно обновляется, но по сути запускается ещё одно..., поверх предыдущего...)
2. Дать команду MouseClick(xx,xx), предварительно прописав в ***.ini SI кнопку с координатами (xx,xx) и командой NewIni=***.ini (да, окно обновляется, но звук клика по экрану не нужен...)
3. ???
Существует ли 3-ий способ обновить окно SI с помощью скрипта не используя предложенные 2 варианта... ???

_SIL_ 14.12.2013 01:38

_RUSER_, Можно попробовать скрыть и сразу отобразить требуемое окно.
Цитата:

9.7.2 Show and activate a window (Show)
Show( window title )
Activates the window with the given title.
9.7.3 Minimize/hide a window (Minimize)
Minimize( window title )
Minimizes (or, on Windows Mobil systems, rather hides) the window with the given title.
На счет Minimize(...) не уверен, что будет работать на всех навиках. Кроме того, если окно было неактвно, то оно станет активным.

Других способов вроде нет кроме как из скрипта вызвать специально написанный экзешник, который вызовет RedrawWindow(...).
Как вариант этот экзешник может изменить размер окна на 1 пиксель и потом обратно установит исходный размер, что тоже приведет к перерисовке нужного окна.

Если ты имел ввиду обновление окна после правки конфига, то никаких других способов нет. Нужно запустить новый SI, а тот что работал со старым конфигом - прибить.

_RUSER_ 14.12.2013 13:53

Цитата:

Сообщение от _SIL_ (Сообщение 348143)
Если ты имел ввиду обновление окна после правки конфига, то никаких других способов нет. Нужно запустить новый SI, а тот что работал со старым конфигом - прибить.

Да, Я имел ввиду перерисовку окна после изменений в конфигурационном файле SI... Тогда как его прибить после запуска второго..., если новое окно (процесс) имеет то-же имя... Если прибить сначала, а затем запустить, то да работает, но окно реально передёргивается (моргает)...
В общем то через MouseClick... всё замечательно работает, если бы не звук щелчка - может от него можно как то избавиться?
Просто я думал можно дать команду на запуск SI с определёнными параметрами Run(........"SI.exe".........) которая бы просто обновила окно SI...
Например в iPhoneToday можно дать команду на перерисовку иконок Run( "....iPhoneToday.exe", "--relaunch" ) или Run( "....iPhoneToday.exe", "--reload" ) , ну и другие команды типа Run( "....iPhoneToday.exe", "--exit" ) и т.д....

_SIL_ 14.12.2013 15:37

Про звук не скажу, не знаю. Лично я бы не пользовался MouseClick+NewIni.
Я бы написал маленький экзешник и он бы 100% корректно сделал бы то, что мне нужно.

На скрипте же можно попробовать как-то так:
Пример


Код:

menu=/sdmms/mymenu/si.exe


# ...
#Настраиваем начальный конфиг менюшки
# ...

run (menu)
sleep(10000)

# ...
#Меняем конфиг менюшки
# ...



#Получаем хэндл активного окна (окна нашего SI)
wnd=activewindow()
        #тут еще нужно бы проверить что активное окно
        #именно нашего SI, а не кокой-то другой проги


#запускаем менюшку с новым конфигом
run (menu)

#Ждем появления окна SI, работающего с новым конфигом (не более 3 секунд)
for f=1 to 30
 sleep(100)
 if (ActiveWindow() ne wnd)
        #тут еще нужно бы проверить что новое активное окно
        #именно нового SI, а не кокой-то другой проги
  f=999
 endif
next

if (f=999)
 #окно с новым конфигом не появилось.
 #как-то обрабатываем это событие
 # ...
else
 #окно с новым конфигом появилось.
 #посылаем окну SI со старым конфигом сообщение WM_CLOSE
 #define WM_CLOSE 0x0010

 postmessage(wnd, 16, 0, 0)
 sleep(500)

endif


olkiy 29.12.2013 00:45

А есть-ли возможность сделать доступными PNG на эмуляторе для PC?
Комментарий модератора
LinXP:
на эмуляторе и так все доступно доступно


В выложенных файлах эмулятора нет. Мой эмулятор v1.6.1 PNG не поддерживает. Потому и спрашиваю...
Комментарий модератора
LinXP:
[[Ссылки могут видеть только зарегистрированные пользователи. ]]> а десктопная версия SI поддерживать PNG не будет


Спасибо, уже разбираюсь

olkiy 02.01.2014 18:37

После установки новой версии у меня работают ТОЛЬКО относительные пути к файлам. По старым (абсолютным) линкам выдает ошибку. Особой проблемы, как-бы, в этом нет, но это нормально?

P.S. Новую версию устанавливал путем копирования одного файла-экзешника SysInfo+PNG.exe. Упоминаемые DLL уже были в системе. Ничего добавлять больше не нужно? PNG работает.

Norm 02.01.2014 19:20

Спасибо автору [[Ссылки могут видеть только зарегистрированные пользователи. ]]> Для менюх с тремя кнопками это не делает никакой погоды, но вот для продвинутых разработок это радикальное решение по уменьшению веса. В качестве примера [[Ссылки могут видеть только зарегистрированные пользователи. ]]> А иконки.... ну в обшем можно и не продолжать
Я раньше и сейчас считаю, что в простоте и гибкости SI нет равных, а теперь и проблема с повышенным весом решена. Спасибо польшое!!! За это можно и бакал поднять:pivo:


Попутно задам вопрос,
Возможно ли реализовать, что бы выполнялясь не одна команда NewIni, а несколько?
Например экран назбит на две части и соответственно имеет два разных ИНИ, при первичной загрузке это реализовать можно простым указанием их в SysInfoSettings.ini, например,
Inis\Bar-1.ini
Inis\ButtEdit-1.ini
но для дальнейшего продолжения этой цепочки нужно использовать в каждом ИНИ свои отдельные кнопки, при этом делать еще одну, под которой лежит скрипт, кторый эмулирует нажатие невидимых кнопок, которые в свою очередь и переводят в реальности оба ИНИ на другие (последующие) ИНИ файлы.
Тоесть если используется одна программа SI и несколько ИНИ одновременно и при нажатии на одну "главную" кнопку выполнялась бы команда не для одного, а для этих нескольких ИНИ файлов.

И еще насколько это проблематично, что бы задний фон тоже поддерживал прозрачность,
а то приходится выкручиваться, создавая этот эфект псевдопрозрачности наложением другой картинки, созжающий этот эфеккт.
[[Ссылки могут видеть только зарегистрированные пользователи. ]]>

_SIL_ 03.01.2014 16:08

Norm, по бошьшому счету все что можно было сделать - сделано. Указать инишник можно только через параметр newini. А этот параметр подразумевает указание только 1 инишника.
По поводу прозрачности фона. Нельзя. Я пытался исхитриться, но... Тут основная проблема в том, что прозрачные картинки прога рисует не обычными системными способами(которые у многих не работают), а своей внутренней подпрограммой. Эта подпрограмма заточена под секцию iconxpbutton и использовать ее другими секциями никак не получается. Чтоб другие секции рисовали картинки с прозрачностью нужно такие подпрограммы писать для каждой секции. Это сложно. Конечно при БОЛЬШОМ желании это сделать можно, но я решил что оно того не стоит, тк скороть значительно снизится да и жрать памяти менюшка станет заметно больше чем сейчас.

Добавлено через 1 час 27 минут
Цитата:

Сообщение от olkiy (Сообщение 351608)
После установки новой версии у меня работают ТОЛЬКО относительные пути к файлам. По старым (абсолютным) линкам выдает ошибку.

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

Norm 03.01.2014 17:59

Понятно,

но вот может это получится, что было бы тоже очень полежным.
В инструкции от разработчика я где-то читал что строка Interval= может применяться в любом из блоков ИНИ файла. Во всяком случае я так понял.
Обрадовшись решил проверить, но это оказалось не так.
Данный параметр работает только на часах и информационных блоках системной информации.
Очень жаль, поскольку это могло бы реально оживить оболочку. Точнее я это уже реализовал у себя.
Происходит обычное актуализирование тогоже ИНИ, который уже загружен.
Всё это делается через скрипты и эмуляцию нахатий на невидимые кнопки.
Но вот было бы круто, если бы программа могла сама актуализировать блоки с отображение, например, текста или картинок.
Тогда можно бало бы создавать анимацию или например текст с бегушей строку.
Тоесть скрипт меняет названия картинок или текста, а программа сама всё это актуализирует в том блоке где указан параметр Interval=


И еще вопрос, но это у же не как уж и нужная функция, но всё же
В SI есть часы, а можно ли сделать таймер с отображением обратного отсчета, по завершении которого выполнялась та или иная команда?
В SI у самой программы используются с глубиной цвета всего 4бит, но есть версии (наверное ломаные) которые имеют 32-х битные иконки.
Можешь ли в ты в своей версии сделать 32 ну или хотя бы 8
[[Ссылки могут видеть только зарегистрированные пользователи. ]]>

Norm 04.01.2014 12:47

Тестирую данную версию
Естественно стало намного лучше, хотя при это приходится перделывать некоторые секции для ини (удалять параметры SizeNormal= и SizePushed=), которые в принципе не нужны.

Нельзя запускать файлов скриптов *.mscr по относительному пути [[Ссылки могут видеть только зарегистрированные пользователи. ]]> NewIni
Передача параметра в виде пути к скрипту не работает, точнее МортСкрипт не находит файл не по абсолютному ни по относительному пути. Кроме того сама структура и редактирование ИНИ посредством скриптов становится сложнее.
Command="..\Scripts\MortScript.exe" \My Flash Disk\NMenu\Filling\Scripts\TB_HotKey.mscr
или
Command="..\Scripts\MortScript.exe" ..\Scripts\TB_HotKey.mscr
По относительному пути возможен запуск только ЕХЕ-файлов [[Ссылки могут видеть только зарегистрированные пользователи. ]]> НО, запуск файлов скриптов *.mscr напрямую всё же возможен, по абсолютному пути (без ковычек), и это уже радует [[Ссылки могут видеть только зарегистрированные пользователи. ]]> Command=\My Flash Disk\NMenu\Filling\Scripts\TB_HotKey.mscr

Цитата:

Сообщение от _SIL_ (Сообщение 351721)
Пользуйтесь относительными путями, это гораздо удобнее.

У мня тоже почти всё работает через относиткльные пути, поэтому возникают определенные трудности с переделкой всего на абсолютные пути, это особенно актуально, когда речь идет о разных устройствах и производителях.:(

Norm 05.01.2014 19:56

Цитата:

Сообщение от _RUSER_ (Сообщение 348053)
На сколько мне известно обновить окно SI с помощью скрипта можно 2-мя способами:
1. Дать команду Run(........"SI.exe") (да, окно обновляется, но по сути запускается ещё одно..., поверх предыдущего...)
2. Дать команду MouseClick(xx,xx), предварительно прописав в ***.ini SI кнопку с координатами (xx,xx) и командой NewIni=***.ini (да, окно обновляется, но звук клика по экрану не нужен...)
3. ???
Существует ли 3-ий способ обновить окно SI с помощью скрипта не используя предложенные 2 варианта... ???

Странно в моем меню эти звуки при эмуляции не слышно [[Ссылки могут видеть только зарегистрированные пользователи. ]]>
Цитата:

Сообщение от _SIL_ (Сообщение 348216)
Я бы написал маленький экзешник и он бы 100% корректно сделал бы то, что мне нужно.
На скрипте же можно попробовать как-то так:
Пример

Код:

menu=/sdmms/mymenu/si.exe


# ...
#Настраиваем начальный конфиг менюшки
# ...

run (menu)
sleep(10000)

# ...
#Меняем конфиг менюшки
# ...



#Получаем хэндл активного окна (окна нашего SI)
wnd=activewindow()
        #тут еще нужно бы проверить что активное окно
        #именно нашего SI, а не кокой-то другой проги


#запускаем менюшку с новым конфигом
run (menu)

#Ждем появления окна SI, работающего с новым конфигом (не более 3 секунд)
for f=1 to 30
 sleep(100)
 if (ActiveWindow() ne wnd)
        #тут еще нужно бы проверить что новое активное окно
        #именно нового SI, а не кокой-то другой проги
  f=999
 endif
next

if (f=999)
 #окно с новым конфигом не появилось.
 #как-то обрабатываем это событие
 # ...
else
 #окно с новым конфигом появилось.
 #посылаем окну SI со старым конфигом сообщение WM_CLOSE
 #define WM_CLOSE 0x0010

 postmessage(wnd, 16, 0, 0)
 sleep(500)

endif


Всё это не сработает (во всяком случае с мортом), поскольку окна от SI определяются как "" , тоесть пустышка.
Подобное я уже пробовал проделывать, но для других целей.
При этом пробовал выяснить какое окно, какому процессу принадлежит, но эти "пустыщки" постоянно мешали это правильно определить, точнее скрипт почемуто пустышкам присваивал неправильный процесс.



Здесь на, мой взгляд, будет хорошо работать такая схема:
Созадать два каталога 1 и 2 и в каждый положить SI
Проверяем какой из процессов запущен
Запускаем один,
делаем запись в ИНИ,
запускаем второй,
Ждем полной загрузки
убиваем первай (обязательно указать полный путь к файлу)

_SIL_ 06.01.2014 12:02

Цитата:

Сообщение от Norm (Сообщение 352036)
Всё это не сработает (во всяком случае с мортом), поскольку окна от SI определяются как "" , тоесть пустышка.

wnd=activewindow()
...
postmessage(wnd, 16, 0, 0)
wnd- это число, а не строка. Не пробовал, но идея правильная, должно работать.

PS. Да, действительно не работает, тк в мортскрипте wnd - титл окна а не его хендл.


Текущее время: 19:59. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot

Время генерации страницы 0.03829 секунды с 10 запросами