[решено] Внедрение иконок в скомпилированный скрипт (использование AutoIt3Wrapper)

Аватара пользователя
saavaage

[решено] Внедрение иконок в скомпилированный скрипт (использование AutoIt3Wrapper)

Сообщение saavaage »

Суть:

попробовал внедрить при компиляции иконки в будущий исполняемый файл. Все, что удалось добиться, - внедрить иконку windows.ico и музыку. Остальные иконки встроились, но не работают. Библиотеку вроде активировал, но не знаю, какие функции из нее использовать и как ими заставить работать все иконки.



Код:




читать дальше »

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

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=Windows.ico
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Description=Resources Test Script
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_Language=1033
#AutoIt3Wrapper_Res_Icon_Add=refresh.ico
#AutoIt3Wrapper_Res_Icon_Add=ok.ico
#AutoIt3Wrapper_Res_Icon_Add=error.ico
#AutoIt3Wrapper_Run_AU3Check=n
#AutoIt3Wrapper_Run_After=ResHacker.exe -add %out%, %out%, MySound.wav, SOUND, 200, 0
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <Constants.au3>
#include <GuiButton.au3>
#include <GUIConstantsEx.au3>
#include <GuiImageList.au3>
#include <Icons.au3>
#include <WinAPI.au3>
#include <GUIConstantsEx.au3>
#Include <Resources.au3>
Global $Pic1_1, $Pic3_1, $Pic1_2, $Pic2_2, $Pic3_2, $PicError, $sLogI1_1, $sLogI1_2, $sLogI2_2, $sLogI3_1, $sLogI3_2, $hIcon, $Width = 14, $Height = 14
Global $Save_Event, $Save_MU, $Save_BITS, $sLog1_2, $sLog2_2, $sLog3_2, $sLog1_1, $sLog3_1
Global $aIcons[2] = [_ResourceSetImageToCtrl(error.ico), _ResourceSetImageToCtrl(ok.ico)]
For $i = 0 To 1
    $hIcon = _Icons_Icon_Extract($aIcons[$i], 0, $Width, $Height)
	$aIcons[$i] = _Icons_Bitmap_CreateFromIcon($hIcon)
	_WinAPI_DestroyIcon($hIcon)
Next
Global $hImageListRefresh = _GUIImageList_Create(16, 16, 5)
_ResourceSetImageToCtrl(-1, "refresh.ico")
Opt("GUIOnEventMode", 1)
$hMain_GUI = GUICreate("Диагностика и Настройка", 619, 442, 189, 122)
GUISetFont(8.5, 400, 0, 'MS Shell Dlg')
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
$Tab1 = GUICtrlCreateTab(8, 16, 601, 377)
;;;; Hotfixes ;;;;
$HotfixErrors = GUICtrlCreateTabItem("HotfixErrors")
$Button_HotFixesUpdate = _GUICtrlCreateButtonEx4("Обновить", 510, 400, 85, 33, 'refresh.ico', -5)
GUICtrlSetTip(-1, "Обновить текущее состояние вкладки")
GUICtrlSetOnEvent($Button_HotFixesUpdate, "_HotFixes_Update")
; Работа со службами
GUICtrlCreateGroup("Службы, отвечающие за Автообновление", 16, 330, 370, 55)
GUICtrlCreateLabel("Автоматич. обновление", 24, 348, 75, 30, $BS_MULTILINE)
GUICtrlSetTip(-1, "тс - текущее состояние службы, тз - тип запуска службы")
GUICtrlCreateLabel("тс", 95, 348, 15, 15)
GUICtrlCreateLabel("тз", 95, 361, 15, 15)
GUICtrlCreateLabel("Фоновая Интел. Служба", 143, 348, 75, 30, $BS_MULTILINE)
GUICtrlCreateLabel("тз", 229, 361, 15, 15)
GUICtrlCreateLabel("Журнал Событий", 282, 348, 75, 30, $BS_MULTILINE)
GUICtrlCreateLabel("тс", 335, 348, 15, 15)
GUICtrlCreateLabel("тз", 335, 361, 15, 15)
$Pic1_1 = GUICtrlCreatePic('', 115, 348, $Width, $Height)
$Pic3_1 = GUICtrlCreatePic('', 355, 348, $Width, $Height)
$Pic1_2 = GUICtrlCreatePic('', 115, 361, $Width, $Height)
$Pic2_2 = GUICtrlCreatePic('', 249, 361, $Width, $Height)
$Pic3_2 = GUICtrlCreatePic('', 355, 361, $Width, $Height)
; запуск и сбор информации о текущем состоянии служб
_ServicesStat()
$Button_StartOptim = GUICtrlCreateButton("Старт", 478, 342, 55, 35, $BS_MULTILINE)
GUICtrlSetOnEvent($Button_StartOptim, "_StartOptim")
$Button_Save = GUICtrlCreateButton("Сохранить", 400, 342, 65, 35, $BS_MULTILINE)
GUICtrlSetOnEvent($Button_Save, "_SaveOld")
GUICtrlSetState(-1, $GUI_FOCUS)
$Button_Restore = GUICtrlCreateButton("Откат", 545, 342, 55, 35, $BS_MULTILINE)
GUICtrlSetOnEvent($Button_Restore, "_RestoreOld")
GUICtrlCreateTabItem("")
GUISetState()
_ResPlaySound('#200')
While 1
    Sleep(100)
WEnd
Func CLOSEClicked()
  Exit
EndFunc
Func _GUICtrlCreateButtonEx4($sText, $iLeft, $iTop, $iWidth = -1, $iHeight = -1, $sIconFile = "", $iIconIndex = 0)
    Local $nButton = GUICtrlCreateButton($sText, $iLeft, $iTop, $iWidth, $iHeight)
    _GUIImageList_AddIcon($hImageListRefresh, $sIconFile, $iIconIndex)
    _GUICtrlButton_SetImageList($nButton, $hImageListRefresh)
    Return $nButton
EndFunc
;; Hotfixes Section ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; функция сохранения текущих настроек служб
Func _SaveOld()
 GUICtrlSetState($Button_Save, $GUI_DISABLE)
 Dim $aSvcState[5]=['boot','system','auto','demand','disabled']
$Save_MU   = $aSvcState[$sLog1_2]
$Save_BITS = $aSvcState[$sLog2_2]
$Save_Event= $aSvcState[$sLog3_2]
 sleep(1000)
 GUICtrlSetState($Button_Save, $GUI_ENABLE)
EndFunc
; функция оптимизации настроек служб для запуска и работы MU
Func _StartOptim()
	GUICtrlSetState($Button_StartOptim, $GUI_DISABLE)
	RunWait('sc config BITS start= demand', '', @SW_HIDE)
	RunWait('sc config wuauserv start= auto', '', @SW_HIDE)
	RunWait('sc start wuauserv', '', @SW_HIDE)
	RunWait('sc config EventLog start= auto', '', @SW_HIDE)
	RunWait('sc start EventLog', '', @SW_HIDE)
     sleep(1000)
   _ServicesStat()
   sleep(1000)
   GUICtrlSetState($Button_StartOptim, $GUI_ENABLE)
EndFunc
; функция откат состояния служб к старым конфигурациям
Func _RestoreOld()
 GUICtrlSetState($Button_Restore, $GUI_DISABLE)
 RunWait('sc config eventlog start= ' & $Save_Event &'', '', @SW_HIDE)
 RunWait('sc config wuauserv start= ' & $Save_MU &'', '', @SW_HIDE)
 RunWait('sc config BITS start= ' & $Save_BITS &'', '', @SW_HIDE)
  sleep(1000)
 _ServicesStat()
 sleep(1000)
 GUICtrlSetState($Button_Restore, $GUI_ENABLE)
EndFunc
; функция кнопки "Обновить"  обновление информации о текущем состоянии служб
Func _HotFixes_Update()
	 GUICtrlSetState($Button_HotFixesUpdate, $GUI_DISABLE)
     _ServicesStat()
     sleep(1000)
     GUICtrlSetState($Button_HotFixesUpdate, $GUI_ENABLE)
 EndFunc
; функция сбора информации о текущем состоянии служб (используется SC и обработка полученного вывода через  StringRegExpReplace)и вывод через иконки данной информации на форму)
Func _ServicesStat()
  $sLog1_1 = ''
  $sLog1_2 = ''
  $sLog2_2 = ''
  $sLog3_1 = ''
  $sLog3_2 = ''
;  запрос информации о состоянии служб (текущее состояние: работает или нет)
 $hIPconfig1_1 = Run('sc query wuauserv', '', @SW_HIDE, $STDOUT_CHILD)
 $hIPconfig3_1 = Run('sc query eventlog', '', @SW_HIDE, $STDOUT_CHILD)
;  запрос информации о типе запуска служб (авто, вручную, отключено)
 $hIPconfig1_2 = Run('sc qc wuauserv', '', @SW_HIDE, $STDOUT_CHILD)
 $hIPconfig2_2 = Run('sc qc BITS', '', @SW_HIDE, $STDOUT_CHILD)
 $hIPconfig3_2 = Run('sc qc eventlog', '', @SW_HIDE, $STDOUT_CHILD)
 While 1
    $sLogI1_1 &= StdoutRead($hIPconfig1_1)
	$sLogI3_1 &= StdoutRead($hIPconfig3_1)
	$sLogI1_2 &= StdoutRead($hIPconfig1_2)
	$sLogI2_2 &= StdoutRead($hIPconfig2_2)
	$sLogI3_2 &= StdoutRead($hIPconfig3_2)
	 If @error Then ExitLoop
    Sleep(10)
 WEnd
; фильтрация информации о службах
  $sLog1_1 = StringRegExpReplace($sLogI1_1, "(?si).*STATE\D*(\d+).*", '\1')
  $sLog3_1 = StringRegExpReplace($sLogI3_1, "(?si).*STATE\D*(\d+).*", '\1')
  $sLog1_2 = StringRegExpReplace($sLogI1_2, "(?si).*START_TYPE\D*(\d+).*", '\1')
  $sLog2_2 = StringRegExpReplace($sLogI2_2, "(?si).*START_TYPE\D*(\d+).*", '\1')
  $sLog3_2 = StringRegExpReplace($sLogI3_2, "(?si).*START_TYPE\D*(\d+).*", '\1')
; программиорование отображение информации о службах через иконки
_SetHImage($Pic1_1, $aIcons[$sLog1_1 = 4])
_SetHImage($Pic3_1, $aIcons[$sLog3_1=4])
_SetHImage($Pic1_2, $aIcons[$sLog1_2=2])
_SetHImage($Pic2_2, $aIcons[(($sLog2_2 = 3) Or ($sLog2_2 = 2))])
_SetHImage($Pic3_2, $aIcons[$sLog3_2=2])
_SetHImage($PicError, $aIcons[$sLog3_1=4])
EndFunc



Подскажите как их заставить работать, плиз



PS Autoit 3.3.6.1 Полный архив с иконками, AutoIt3Wrapper, библиотекой, ResHacker и т.д. - в аттаче - см. пост:
[решено] Внедрение иконок в скомпилированный скрипт (использование AutoIt3Wrapper)
Аватара пользователя
FlatX007

Re: [решено] Внедрение иконок в скомпилированный скрипт (использование AutoIt3Wrapper)

Сообщение FlatX007 »

#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
Аватара пользователя
saavaage

Re: [решено] Внедрение иконок в скомпилированный скрипт (использование AutoIt3Wrapper)

Сообщение saavaage »

FlatX007, не подскажите технологию, т.е. что значат параметры:

-delete %out%, %out%, DIALOG, 1000,

-delete %out%, %out%, ICON, 169,



или

-add %out%, %out%, Settings.ico, Icon, 0, 0
Аватара пользователя
saavaage

Re: [решено] Внедрение иконок в скомпилированный скрипт (использование AutoIt3Wrapper)

Сообщение saavaage »

Цитата saavaage:



не подскажите технологию, т.е. что значат параметры:
[решено] Внедрение иконок в скомпилированный скрипт (использование AutoIt3Wrapper)




В скомпилированный файл "вживляются" стандартный иконки AutoIt, а так же стандартный диалог ... и др. Всё это можно посмотреть редактором ресурсов - Restorator`ом, ResHack`ом ...

-delete - команда для удаления ресурсов.



Кусок справки ResHack`era


читать дальше »


To add or update dialog name:maindlg lang:0 in MyProg.exe from UpdDlg.res

ResHacker.exe -addoverwrite MyProg.exe, MyProgNew.exe, upddlg.res, dialog,maindlg,0



To add or update bitmap name:128 in MyProg.exe from NewImage.bmp

ResHacker.exe -addoverwrite MyProg.exe, MyProgNew.exe, NewImage.bmp , bitmap,128,



To add or update all bitmaps in MyProg.exe from Images.res

ResHacker.exe -addoverwrite MyProg.exe, MyProgNew.exe, Images.res, bitmap,,



To add a “userdefined” binary resource (README,1,0) to MyProg.exe from ReadMe.html

ResHacker.exe -addoverwrite MyProg.exe, MyProgNew.exe, ReadMe.html, readme,1,0



To add all items in Images.res to MyProg.exe (but fail if any item already exists)

ResHacker.exe -add MyProg.exe, MyProgNew.exe, Images.res ,,,



To add all items in Images.res to MyProg.exe (skipping any existing items)

ResHacker.exe -addskip MyProg.exe, MyProgNew.exe, Images.res ,,,



To modify all items in MyProg.exe with the items in Images.res (ignoring any items in Images.res which do not exist in MyProg.exe)

ResHacker.exe -modify MyProg.exe, MyProgNew.exe, Images.res , , ,



To extract all icons from MyProg.exe to myprogicons.rc (creating myprogicons.rc, Icon_1.ico, Icon_2.ico , Icon_3.ico etc...)

ResHacker.exe -extract MyProg.exe, myprogicons.rc, icongroup,,



To delete GIF name:128 from MyProg.exe

ResHacker.exe -delete MyProg.exe, MyProgNew.exe, gif,128,



Скачать ResHack (офф.сайт)





Цитата saavaage:



-delete %out%, %out%, ICON, 169,
[решено] Внедрение иконок в скомпилированный скрипт (использование AutoIt3Wrapper)




Удаляем набор стандартных иконок, что бы индекс наших иконок начинался с Нуля, в AutoIt3Wrapper иконку можно не выбирать, она будет под индексом 1.



Код:

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

#AutoIt3Wrapper_Run_After=ResHacker.exe -add %out%, %out%, ExeIcon.ico, Icon, 1, 0

Для окна GUI можно сделать так:



Код:

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

GUISetIcon(@ScriptFullPath, 1)
Вложения
Icons.7z
(6.91 КБ) 0 скачиваний
Icons.7z
(6.91 КБ) 0 скачиваний
Аватара пользователя
FlatX007

Re: [решено] Внедрение иконок в скомпилированный скрипт (использование AutoIt3Wrapper)

Сообщение FlatX007 »

FlatX007, ладно, пошел спать (3 суток уже не кемарил). Как отосплюсь - проверю свой бред еще раз... Спасибо
Аватара пользователя
saavaage

Re: [решено] Внедрение иконок в скомпилированный скрипт (использование AutoIt3Wrapper)

Сообщение saavaage »

FlatX007, ладно, пошел спать (3 суток уже не кемарил). Как отосплюсь - проверю свой бред еще раз... Спасибо
Аватара пользователя
saavaage

Re: [решено] Внедрение иконок в скомпилированный скрипт (использование AutoIt3Wrapper)

Сообщение saavaage »

Ой как всё трудно ...








читать дальше »



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

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_outfile=Output\Test.exe
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -delete %out%, %out%, DIALOG, 1000,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -delete %out%, %out%, ICON, 162,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -delete %out%, %out%, ICON, 164,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -delete %out%, %out%, MENU, 166,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -delete %out%, %out%, ICON, 169,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -add %out%, %out%, Ico\Tools.ico, Icon, 0, 0
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -add %out%, %out%, Ico\Globe.ico, Icon, 1, 0
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -add %out%, %out%, Ico\Restart.ico, Icon, 2, 0
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -add %out%, %out%, Ico\Settings.ico, Icon, 3, 0
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -add %out%, %out%, Ico\Time.ico, Icon, 4, 0
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -add %out%, %out%, Ico\Aide.ico, Icon, 5, 0
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -add %out%, %out%, Ico\!.ico, Icon, 6, 0
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -add %out%, %out%, Ico\RSS.ico, Icon, 7, 0
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -add %out%, %out%, Ico\Mail.ico, Icon, 8, 0
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -add %out%, %out%, Ico\About.ico, Icon, 9, 0
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -add %out%, %out%, Ico\OFF.ico, Icon, 10, 0
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -add %out%, %out%, Ico\Oui.ico, Icon, 11, 0
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -add %out%, %out%, Ico\Transp.ico, Icon, 12, 0
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -add %out%, %out%, Ico\Plus.ico, Icon, 13, 0
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -add %out%, %out%, Ico\ReadMe.ico, Icon, 14, 0
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiButton.au3>
#Include <GuiImageList.au3>
Global $Button[15], $hImageList[15]
$Form1 = GUICreate("", 150, 600, 217, 131)
For $i = 0 To 14
    $Button[$i] = GUICtrlCreateButton($i, 30, 43 * $i, 75, 41, 0)
Next
If @Compiled Then
    For $iList = 0 To 14
        $hImageList[$iList] = _GUIImageList_Create(32, 32, 5, 3, 6)
        Local $aImage[5] = [$iList, $iList, $iList, $iList, $iList] ; [Иконка наложения , при наведении , при нажатии , нет ,  иконка после нажатия на кнопку]
        For $f = 0 To UBound($aImage) - 1
            _GUIImageList_AddIcon($hImageList[$iList], @ScriptFullPath, $aImage[$f], True)
        Next
        _GUICtrlButton_SetImageList($Button[$iList], $hImageList[$iList])
    Next
EndIf
GUISetState(@SW_SHOW)
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd



Мой полный пример
Аватара пользователя
FlatX007

Re: [решено] Внедрение иконок в скомпилированный скрипт (использование AutoIt3Wrapper)

Сообщение FlatX007 »

FlatX007, с вставкой в кнопки разобрался, спасибо. Есть ли возможность вставить n конкретных иконкок (в моем случае 4) из массива $hImageList[15] в массив $aIcons[2]?



в моем коде это:



Код:

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

Global $aIcons[2] = ['error.ico', 'Ok.ico' ]
For $i = 0 To 1
    $hIcon = _Icons_Icon_Extract($aIcons[$i], 0, $Width, $Height)
	$aIcons[$i] = _Icons_Bitmap_CreateFromIcon($hIcon)
	_WinAPI_DestroyIcon($hIcon)
Next

Пробовал через _GUIImageList_GetIcon, но не получилось.



Дело в том, что не нашел функции, аналогичной _GUICtrlButton_SetImageList, но только для Pics (мне необходимо разместить иконку в конкретном месте вкладки Tab), не делать же это через button...



PS не серчай, я всегда стараюсь сначала сам решить проблему, но тут туплю и хоть убейся...
Аватара пользователя
saavaage

Re: [решено] Внедрение иконок в скомпилированный скрипт (использование AutoIt3Wrapper)

Сообщение saavaage »

FlatX007, с вставкой в кнопки разобрался, спасибо. Есть ли возможность вставить n конкретных иконкок (в моем случае 4) из массива $hImageList[15] в массив $aIcons[2]?



в моем коде это:



Код:

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

Global $aIcons[2] = ['error.ico', 'Ok.ico' ]
For $i = 0 To 1
    $hIcon = _Icons_Icon_Extract($aIcons[$i], 0, $Width, $Height)
	$aIcons[$i] = _Icons_Bitmap_CreateFromIcon($hIcon)
	_WinAPI_DestroyIcon($hIcon)
Next

Пробовал через _GUIImageList_GetIcon, но не получилось.



Дело в том, что не нашел функции, аналогичной _GUICtrlButton_SetImageList, но только для Pics (мне необходимо разместить иконку в конкретном месте вкладки Tab), не делать же это через button...



PS не серчай, я всегда стараюсь сначала сам решить проблему, но тут туплю и хоть убейся...
Ответить

Вернуться в «AutoIt»