![]() |
Внедрение иконок в скомпилированный скрипт (использование AutoIt3Wrapper)
Суть:
попробовал внедрить при компиляции иконки в будущий исполняемый файл. Все, что удалось добиться, - внедрить иконку windows.ico и музыку. Остальные иконки встроились, но не работают. Библиотеку вроде активировал, но не знаю, какие функции из нее использовать и как ими заставить работать все иконки. Код: Подскажите как их заставить работать, плиз PS Autoit 3.3.6.1 Полный архив с иконками, AutoIt3Wrapper, библиотекой, ResHacker и т.д. - в аттаче - см. пост: http://forum.oszone.net/post-1507813-4.html |
#AutoIt3Wrapper_Run_After=ResHacker.exe -delete %out%, %out%, DIALOG, 1000,
#AutoIt3Wrapper_Run_After=ResHacker.exe -delete %out%, %out%, ICON, 162, #AutoIt3Wrapper_Run_After=ResHacker.exe -delete %out%, %out%, ICON, 164, #AutoIt3Wrapper_Run_After=ResHacker.exe -delete %out%, %out%, MENU, 166, #AutoIt3Wrapper_Run_After=ResHacker.exe -delete %out%, %out%, ICON, 169, #AutoIt3Wrapper_Run_After=ResHacker.exe -add %out%, %out%, Settings.ico, Icon, 0, 0 #AutoIt3Wrapper_Run_After=ResHacker.exe -add %out%, %out%, RSS.ico, Icon, 1, 0 |
FlatX007, не подскажите технологию, т.е. что значат параметры:
-delete %out%, %out%, DIALOG, 1000, -delete %out%, %out%, ICON, 169, или -add %out%, %out%, Settings.ico, Icon, 0, 0 |
Вложений: 1
Внес изменения в код, но не помогло. Вот, что получилось:
Прикрепил полный рабочий набор (см. аттач), включая библиотеку и все файлы |
Цитата:
-delete - команда для удаления ресурсов. Кусок справки ResHack`era Скачать ResHack (офф.сайт) Цитата:
Код:
#AutoIt3Wrapper_Run_After=ResHacker.exe -add %out%, %out%, ExeIcon.ico, Icon, 1, 0 Код:
GUISetIcon(@ScriptFullPath, 1) |
FlatX007, ладно, пошел спать (3 суток уже не кемарил). Как отосплюсь - проверю свой бред еще раз... Спасибо
|
FlatX007,
Единственное, что пришло в голову, это применить функцию _ResGetAsImage: получилось для массива: Код:
$Icon_Ok = _ResGetAsImage('#201', -1) Код:
Код: AutoIt [Выделить] Немного сократил код для лучшей ориентации. Новый сокращенный код скрипта: PS Просмотрел полученный скомпилированный файл при помощи ResHacker - ok.ico и error.ico просматриваются, refresh. ico при попытке просмотра выдает "отказано в доступе". Вопросы: 1. я правильно брал номера иконок из секции Icon Group?, 2. означает ли сообщение "отказано в доступе@? что иконка встроилась некорректно? |
|
FlatX007, с вставкой в кнопки разобрался, спасибо. Есть ли возможность вставить n конкретных иконкок (в моем случае 4) из массива $hImageList[15] в массив $aIcons[2]?
в моем коде это: Код:
Global $aIcons[2] = ['error.ico', 'Ok.ico' ] Дело в том, что не нашел функции, аналогичной _GUICtrlButton_SetImageList, но только для Pics (мне необходимо разместить иконку в конкретном месте вкладки Tab), не делать же это через button... PS не серчай, я всегда стараюсь сначала сам решить проблему, но тут туплю и хоть убейся... |
а может так, я может не понимаю всю глубину проблемы.
Код:
$Icon1 = GUICtrlCreateIcon(@ScriptFullPath, 1, 16, 40, 48, 48) |
FlatX007, да, можно! Я почему-то думал, что эта функция не применяется для вкладок, только для формы в целом.
Вопрос - а вариант из массива в массив реализуем или нет? |
Цитата:
|
FlatX007, пока только 1 причина - слишком много прийдется переделывать. Так все было завязано на нем. Если бы удалось закинуть иконки в него, то этим все и ограничилось бы. Ну и любопытство, конечно. Я пытался, но не получилось. Вот подумал, что Вы подскажете и мне знаний добавится в "копилку".
Ладно, спасибо Вам пребольшое. |
Код:
$aIcons[2] = [1, 2] |
FlatX007, что-то у меня есть смутное подозрение., что на нескольких вкладках это не пройдет. Я имею ввиду вариант с
$Icon1 = GUICtrlCreateIcon(@ScriptFullPath, $aIcons[0], 16, 40, 48, 48) Сейчас буду проверять... |
FlatX007, к сожалению, похоже данный вариант не имеет привязки к конкретной вкладке и при обновлении индикаторов, происходит их отрисовка на всех вкладках формы.
Вот такие котелки... |
Совсем не так =) ? доработй этот пример чтобы иконки показывались одновременно.
Код:
$Form1 = GUICreate("", 228, 231) |
FlatX007, почему тогда у меня не работает этот вариант:
А именно, не передается информация из GuiCtrlSetData($Pic1_1, 1) и GuiCtrlSetData($Pic1_2, 1) в GUICtrlCreateIcon(@ScriptFullPath, $Pic1_1, 115, 348, 16, 16) GUICtrlCreateIcon(@ScriptFullPath, $Pic1_2, 115, 361, 16, 16) Дело в том, что в моем случае иконки не статичные, а должны меняться в зависимости от состояния службы... А при нажатии на кнопку "Обновить" должно повторно обновляться состояние иконок в зависимости от состояния службы на данный момент. |
Вроде на моём примере показано что каждую иконку надо располагать на своей вкладке!!
И можно рабочие примеры выкладывать, мне самому приходится инклиды подставлять. Код:
#include <GUIConstantsEx.au3> |
FlatX007, они обе должны быть на одной... Рабочий не выкладывал, т.к. пришлось бы и иконки кидать...Думал Вы навскидку скажете.. Пардон.
|
Ну неважно, смысл понятен ? всё работает.
|
FlatX007, посмотрел пример. Как ни странно, обновление происходит только при однократном нажатии на кнопку "Обновить". После изменения статуса службы или типа ее запуска, ничего не меняется.
Вот немного изменил иконки для пущей наглядности: FlatX007, индикаторы служат для сигнализации службы обновления Попробуйте сделать следующее: 1. запустить скрипт 2. нажать на кнопку обновить - > иконки поменялись 3. заходим Панель управления -> администрирование -> службы и меняем у Автоматического обновления статус и тип запуска 4. жмем на обновить - > иконки не поменялись.. Я уже просто в тихом трансе. Из-за этих иконок не могу собрать утилиту. Знал бы -заменил на сигнализацию цветом, блин... |
Я разобрался StringRegExpReplace - не срабатывал, а следовательно возвращал полную информацию вместо 2,4 ...
Код:
; фильтрация информации о службах Правильно будет так: Код:
#include <Encoding.au3> |
FlatX007, черт, тут даже не в этом была проблема!!! Я, походу, взял не те исходники. Сегодня буду чистить весь мусор из версий, блин. Ошибка закралась гораздо раньше, в строках:
Код:
; запрос информации о состоянии служб (текущее состояние: работает или нет) Код:
; запрос информации о состоянии служб (текущее состояние: работает или нет) Извиняюсь еще раз, что запудрил мозги. Спасибо! PS Полегче - не получится, т.к. уже поставил перед собой задачу и практически ее сделал, может сегодня - завтра выложу свою контрольную работу на тему "Введение в Autoit" на обсуждение ошибок... |
FlatX007, весьма странно, но у меня все прекрасно отрабатывает без перегонки в формат с перекодировкой.
Windows XP Pro Ru SP3, не совсем понимаю, почему у вас идет русский вывод информации о службах, у меня все на английском. Собственно поэтому я и убрал тут перекодировку... Не подскажите, что у Вас за система? Неужели, прийдется еще вводить проверку и на рус/англ? |
Таким образом, рабочий код (при условии, что у вас XPPro Rus SP3):
Если не отрабатывает сигнализация, то заменить условие фильтрации на : Проверьте еще раз, пожалуйста, FlatX007. Архив с иконками и прочим - в аттаче http://ifolder.ru/19573601 |
У меня Win 7 не срабатывает пример, переменная $sLog1_1 - возвращает это:
Код:
?¬п_б«г¦Ўл: wuauserv Нужно делать два! щаблона на XP и на Win Vista, 7 ...мой пример объединить с вашим. |
FlatX007, Пока у мея стоит, к сожалению, только XP. Я и делал утилиту под нее. Без 7 на борту невозможно будет проверить как и что работает.
Вобщем, выкладываю на форуме для тестинга то, что получилось. Спасибо Вам большое, последние 3 дня, благодаря этой проблеме, чуть меня с ума не свели. Но теперь, по крайней мере разобрался, что и как. FlatX007, как будет SP1 по 7-ке, тогда поставлю новую ось и начну адаптацию... |
Время: 19:40. |
Время: 19:40.
© OSzone.net 2001-