Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Внедрение иконок в скомпилированный скрипт (использование AutoIt3Wrapper) (http://forum.oszone.net/showthread.php?t=186800)

saavaage 29-09-2010 00:37 1506912

Внедрение иконок в скомпилированный скрипт (использование AutoIt3Wrapper)
 
Суть:
попробовал внедрить при компиляции иконки в будущий исполняемый файл. Все, что удалось добиться, - внедрить иконку 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 и т.д. - в аттаче - см. пост: http://forum.oszone.net/post-1507813-4.html

FlatX007 29-09-2010 18:32 1507553

#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 29-09-2010 22:31 1507758

FlatX007, не подскажите технологию, т.е. что значат параметры:
-delete %out%, %out%, DIALOG, 1000,
-delete %out%, %out%, ICON, 169,

или
-add %out%, %out%, Settings.ico, Icon, 0, 0

saavaage 30-09-2010 00:04 1507813

Вложений: 1
Внес изменения в код, но не помогло. Вот, что получилось:
читать дальше »
Код:

#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= 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
#AutoIt3Wrapper_Res_Icon_Add= refresh.ico
#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


Прикрепил полный рабочий набор (см. аттач), включая библиотеку и все файлы

FlatX007 30-09-2010 10:40 1507992

Цитата:

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

В скомпилированный файл "вживляются" стандартный иконки 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 иконку можно не выбирать, она будет под индексом 1.
Код:

#AutoIt3Wrapper_Run_After=ResHacker.exe -add %out%, %out%, ExeIcon.ico, Icon, 1, 0
Для окна GUI можно сделать так:
Код:

GUISetIcon(@ScriptFullPath, 1)

saavaage 30-09-2010 11:56 1508052

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

saavaage 30-09-2010 17:08 1508278

FlatX007,
Единственное, что пришло в голову, это применить функцию _ResGetAsImage:
получилось для массива:

Код:

$Icon_Ok = _ResGetAsImage('#201', -1)
$Icon_Er = _ResGetAsImage('#202',-1)

Global $aIcons[2] = [$Icon_Er, $Icon_Ok ]
;~ 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

для кнопки обновления:

Код:

Код: AutoIt [Выделить]
$Icon_Ref = _ResGetAsImage('#203',-1)
$Button_HotFixesUpdate = _GUICtrlCreateButtonEx4("Обновить", 510, 400, 85, 33, $Icon_Ref, -5)

и опять облом..

Немного сократил код для лучшей ориентации. Новый сокращенный код скрипта:

читать дальше »
Код:

#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=error.ico
#AutoIt3Wrapper_Res_Icon_Add=ok.ico
#AutoIt3Wrapper_Res_Icon_Add=refresh.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, $Pic1_2, $sLogI1_1, $sLogI1_2, $hIcon, $Width = 14, $Height = 14
Global $sLog1_2, $sLog1_1

$Icon_Ok = _ResGetAsImage('#201', -1)
$Icon_Er = _ResGetAsImage('#202',-1)

Global $aIcons[2] = [$Icon_Er, $Icon_Ok ]
;~ 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

Global $hImageListRefresh = _GUIImageList_Create(16, 16, 5)


Opt("GUIOnEventMode", 1)

$hMain_GUI = GUICreate("Диагностика и Настройка", 619, 442, 189, 122)
GUISetIcon('Windows.ico', 1)
GUISetFont(8.5, 400, 0, 'MS Shell Dlg')
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

$Tab1 = GUICtrlCreateTab(8, 16, 601, 377)

;;;; Hotfixes ;;;;
$HotfixErrors = GUICtrlCreateTabItem("HotfixErrors")
$Icon_Ref = _ResGetAsImage('#203',-1)
$Button_HotFixesUpdate = _GUICtrlCreateButtonEx4("Обновить", 510, 400, 85, 33, $Icon_Ref, -5)
;~ $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)


$Pic1_1 = GUICtrlCreatePic('', 115, 348, $Width, $Height)
$Pic1_2 = GUICtrlCreatePic('', 115, 361, $Width, $Height)
; запуск и сбор информации о текущем состоянии служб
_ServicesStat()

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 _HotFixes_Update()
        GUICtrlSetState($Button_HotFixesUpdate, $GUI_DISABLE)
    _ServicesStat()
    sleep(1000)
    GUICtrlSetState($Button_HotFixesUpdate, $GUI_ENABLE)
 EndFunc

; функция сбора информации о текущем состоянии служб (используется SC и обработка полученного вывода через  StringRegExpReplace)и вывод через иконки данной информации на форму)
Func _ServicesStat()

  $sLog1_1 = ''
  $sLog1_2 = ''

;  запрос информации о состоянии служб (текущее состояние: работает или нет)
 $hIPconfig1_1 = Run('sc query wuauserv', '', @SW_HIDE, $STDOUT_CHILD)
;  запрос информации о типе запуска служб (авто, вручную, отключено)
 $hIPconfig1_2 = Run('sc qc wuauserv', '', @SW_HIDE, $STDOUT_CHILD)

 While 1
    $sLogI1_1 &= StdoutRead($hIPconfig1_1)
        $sLogI1_2 &= StdoutRead($hIPconfig1_2)

        If @error Then ExitLoop
    Sleep(10)
 WEnd

; фильтрация информации о службах
  $sLog1_1 = StringRegExpReplace($sLogI1_1, "(?si).*STATE\D*(\d+).*", '\1')
  $sLog1_2 = StringRegExpReplace($sLogI1_2, "(?si).*START_TYPE\D*(\d+).*", '\1')

; программиорование отображение информации о службах через иконки

_SetHImage($Pic1_1, $aIcons[$sLog1_1 = 4])
_SetHImage($Pic1_2, $aIcons[$sLog1_2=2])

EndFunc




PS Просмотрел полученный скомпилированный файл при помощи ResHacker - ok.ico и error.ico просматриваются, refresh. ico при попытке просмотра выдает "отказано в доступе".
Вопросы: 1. я правильно брал номера иконок из секции Icon Group?,
2. означает ли сообщение "отказано в доступе@? что иконка встроилась некорректно?

FlatX007 30-09-2010 19:15 1508390

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



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

Код:

#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



Мой полный пример :)

saavaage 01-10-2010 18:33 1509119

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 не серчай, я всегда стараюсь сначала сам решить проблему, но тут туплю и хоть убейся...

FlatX007 01-10-2010 18:47 1509131

а может так, я может не понимаю всю глубину проблемы.
Код:

$Icon1 = GUICtrlCreateIcon(@ScriptFullPath, 1, 16, 40, 48, 48)

saavaage 01-10-2010 19:25 1509151

FlatX007, да, можно! Я почему-то думал, что эта функция не применяется для вкладок, только для формы в целом.

Вопрос - а вариант из массива в массив реализуем или нет?

FlatX007 01-10-2010 19:41 1509156

Цитата:

Цитата saavaage
Вопрос - а вариант из массива в массив реализуем или нет? »

Не понял если честно зачем массив.

saavaage 01-10-2010 19:55 1509164

FlatX007, пока только 1 причина - слишком много прийдется переделывать. Так все было завязано на нем. Если бы удалось закинуть иконки в него, то этим все и ограничилось бы. Ну и любопытство, конечно. Я пытался, но не получилось. Вот подумал, что Вы подскажете и мне знаний добавится в "копилку".

Ладно, спасибо Вам пребольшое.

FlatX007 01-10-2010 20:11 1509174

Код:

$aIcons[2] = [1, 2]

$Icon1 = GUICtrlCreateIcon(@ScriptFullPath, $aIcons[0], 16, 40, 48, 48)
$Icon2 = GUICtrlCreateIcon(@ScriptFullPath, $aIcons[1], 16, 40, 48, 48)


saavaage 01-10-2010 20:31 1509185

FlatX007, что-то у меня есть смутное подозрение., что на нескольких вкладках это не пройдет. Я имею ввиду вариант с
$Icon1 = GUICtrlCreateIcon(@ScriptFullPath, $aIcons[0], 16, 40, 48, 48)
Сейчас буду проверять...

saavaage 01-10-2010 23:22 1509296

FlatX007, к сожалению, похоже данный вариант не имеет привязки к конкретной вкладке и при обновлении индикаторов, происходит их отрисовка на всех вкладках формы.
Вот такие котелки...

FlatX007 02-10-2010 01:18 1509371

Совсем не так =) ? доработй этот пример чтобы иконки показывались одновременно.
Код:

$Form1 = GUICreate("", 228, 231)
$Tab1 = GUICtrlCreateTab(24, 16, 185, 193)
$TabSheet1 = GUICtrlCreateTabItem("1")
$Icon2 = GUICtrlCreateIcon("shell32.dll", 23, 120, 144, 48, 48)
$TabSheet2 = GUICtrlCreateTabItem("2")
$Icon1 = GUICtrlCreateIcon("shell32.dll", 28, 40, 48, 48, 48)
GUICtrlCreateTabItem("")
GUISetState()

Do
Until
GUIGetMsg() = -3


saavaage 02-10-2010 02:45 1509397

FlatX007, почему тогда у меня не работает этот вариант:

читать дальше »
Код:

Global $Pic1_1, $Pic1_2, $P1_1, $P1_2, $sLogI1_1, $sLogI1_2
Global $sLog1_2, $sLog1_1
Global $hImageListCom[4]


Opt("GUIOnEventMode", 1)

$hMain_GUI = GUICreate("Диагностика и Настройка", 619, 442, 189, 122)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
_IconCom()

$Tab1 = GUICtrlCreateTab(8, 16, 601, 377)

$HotfixErrors = GUICtrlCreateTabItem("HotfixErrors")
$Button_HotFixesUpdate = GUICtrlCreateButton("Обновить", 510, 400, 85, 33, 0)
_GUICtrlButton_SetImageList($Button_HotFixesUpdate, $hImageListCom[2])
GUICtrlSetOnEvent($Button_HotFixesUpdate, "_HotFixes_Update")

_ServicesStat()
GUICtrlCreateIcon(@ScriptFullPath, $Pic1_1, 115, 348, 16, 16)
GUICtrlCreateIcon(@ScriptFullPath, $Pic1_2, 115, 361, 16, 16)


; запуск и сбор информации о текущем состоянии служб
$Hotfix = GUICtrlCreateTabItem("Hotfix")

GUICtrlCreateTabItem("")

GUISetState()

While 1
    Sleep(100)
WEnd

Func CLOSEClicked()
  Exit
EndFunc

Func _IconCom()

  If @Compiled Then
        For $iListCom = 0 To 3

                $hImageListCom[$iListCom] = _GUIImageList_Create(16, 16, 5, 3, 6)

                Local $aImageCom[5] = [$iListCom, $iListCom, $iListCom, $iListCom, $iListCom] ; [Иконка наложения , при наведении , при нажатии , нет ,  иконка после нажатия на кнопку]

                For $f = 0 To UBound($aImageCom) - 1
                        _GUIImageList_AddIcon($hImageListCom[$iListCom], @ScriptFullPath, $aImageCom[$f], True)
                Next

        Next
  EndIf
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 = ''

;  запрос информации о состоянии служб (текущее состояние: работает или нет)
 $hIPconfig1_1 = Run('sc query wuauserv', '', @SW_HIDE, $STDOUT_CHILD)
;  запрос информации о типе запуска служб (авто, вручную, отключено)
 $hIPconfig1_2 = Run('sc qc wuauserv', '', @SW_HIDE, $STDOUT_CHILD)

 While 1
    $sLogI1_1 &= StdoutRead($hIPconfig1_1)
        $sLogI1_2 &= StdoutRead($hIPconfig1_2)

        If @error Then ExitLoop
    Sleep(10)
 WEnd

; фильтрация информации о службах
  $sLog1_1 = StringRegExpReplace($sLogI1_1, "(?si).*STATE\D*(\d+).*", '\1')
  $sLog1_2 = StringRegExpReplace($sLogI1_2, "(?si).*START_TYPE\D*(\d+).*", '\1')

; программиорование отображение информации о службах через иконки
IF $sLog1_1 = 4  Then
        GuiCtrlSetData($Pic1_1, 2)
Else
    GuiCtrlSetData($Pic1_1, 1)
EndIf

IF $sLog1_2 = 2  Then
        GuiCtrlSetData($Pic1_2, 2)
Else
    GuiCtrlSetData($Pic1_2, 1)
EndIf

EndFunc



А именно, не передается информация из
GuiCtrlSetData($Pic1_1, 1) и
GuiCtrlSetData($Pic1_2, 1)

в

GUICtrlCreateIcon(@ScriptFullPath, $Pic1_1, 115, 348, 16, 16)
GUICtrlCreateIcon(@ScriptFullPath, $Pic1_2, 115, 361, 16, 16)

Дело в том, что в моем случае иконки не статичные, а должны меняться в зависимости от состояния службы... А при нажатии на кнопку "Обновить" должно повторно обновляться состояние иконок в зависимости от состояния службы на данный момент.

FlatX007 02-10-2010 03:16 1509408

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

Код:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiButton.au3>
#Include <GuiImageList.au3>

Global $Pic1_1, $Pic1_2, $P1_1, $P1_2, $sLogI1_1, $sLogI1_2
Global $sLog1_2, $sLog1_1
Global $hImageListCom[4]

Global $Icon_Hotfix, $Icon_HotfixErrors

Opt("GUIOnEventMode", 1)

$hMain_GUI = GUICreate("Диагностика и Настройка", 619, 442, 189, 122)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
_IconCom()

$Tab1 = GUICtrlCreateTab(8, 16, 601, 377)
    $HotfixErrors = GUICtrlCreateTabItem("HotfixErrors")
        $Button_HotFixesUpdate = GUICtrlCreateButton("Обновить", 510, 400, 85, 33, 0)
        _GUICtrlButton_SetImageList($Button_HotFixesUpdate, $hImageListCom[2])
        GUICtrlSetOnEvent($Button_HotFixesUpdate, "_HotFixes_Update")
        _ServicesStat()
        $Icon_HotfixErrors = GUICtrlCreateIcon("shell32.dll", 23, 115, 348, 16, 16)

    $Hotfix = GUICtrlCreateTabItem("Hotfix")
        $Icon_Hotfix = GUICtrlCreateIcon("shell32.dll", 28, 115, 361, 16, 16)

GUICtrlCreateTabItem("")
GUISetState()

While 1
    Sleep(1000)
WEnd

Func
CLOSEClicked()
  Exit
EndFunc

Func
_IconCom()

  If @Compiled Then
    For
$iListCom = 0 To 3

        $hImageListCom[$iListCom] = _GUIImageList_Create(16, 16, 5, 3, 6)

        Local $aImageCom[5] = [$iListCom, $iListCom, $iListCom, $iListCom, $iListCom] ; [Иконка наложения , при наведении , при нажатии , нет ,  иконка после нажатия на кнопку]

        For $f = 0 To UBound($aImageCom) - 1
            _GUIImageList_AddIcon($hImageListCom[$iListCom], @ScriptFullPath, $aImageCom[$f], True)
        Next

    Next
  EndIf
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 = ''

;  запрос информации о состоянии служб (текущее состояние: работает или нет)
 $hIPconfig1_1 = Run('sc query wuauserv', '', @SW_HIDE, "")
;  запрос информации о типе запуска служб (авто, вручную, отключено)
 $hIPconfig1_2 = Run('sc qc wuauserv', '', @SW_HIDE, "")

 While 1
    $sLogI1_1 &= StdoutRead($hIPconfig1_1)
    $sLogI1_2 &= StdoutRead($hIPconfig1_2)

    If @error Then ExitLoop
    Sleep(10)
 WEnd

; фильтрация информации о службах
  $sLog1_1 = StringRegExpReplace($sLogI1_1, "(?si).*STATE\D*(\d+).*", '\1')
  $sLog1_2 = StringRegExpReplace($sLogI1_2, "(?si).*START_TYPE\D*(\d+).*", '\1')

; программиорование отображение информации о службах через иконки
IF $sLog1_1 = 4  Then
;~  GuiCtrlSetData($Pic1_1, 2)
    GUICtrlSetImage($Icon_Hotfix, "shell32.dll", 5)
Else
;~    GuiCtrlSetData($Pic1_1, 1)
    GUICtrlSetImage($Icon_Hotfix, "shell32.dll", 22)
EndIf

IF
$sLog1_2 = 2  Then
;~  GuiCtrlSetData($Pic1_2, 2)
    GUICtrlSetImage($Icon_HotfixErrors, "shell32.dll", 5)
Else
;~    GuiCtrlSetData($Pic1_2, 1)
    GUICtrlSetImage($Icon_HotfixErrors, "shell32.dll", 22)
EndIf

EndFunc


saavaage 02-10-2010 03:18 1509412

FlatX007, они обе должны быть на одной... Рабочий не выкладывал, т.к. пришлось бы и иконки кидать...Думал Вы навскидку скажете.. Пардон.

FlatX007 02-10-2010 03:24 1509414

Ну неважно, смысл понятен ? всё работает.

saavaage 02-10-2010 03:56 1509421

FlatX007, посмотрел пример. Как ни странно, обновление происходит только при однократном нажатии на кнопку "Обновить". После изменения статуса службы или типа ее запуска, ничего не меняется.

Вот немного изменил иконки для пущей наглядности:

читать дальше »
Код:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiButton.au3>
#Include <GuiImageList.au3>

Global $Pic1_1, $Pic1_2, $P1_1, $P1_2, $sLogI1_1, $sLogI1_2
Global $sLog1_2, $sLog1_1
Global $hImageListCom[4]

Global $Icon_Hotfix, $Icon_HotfixErrors

Opt("GUIOnEventMode", 1)

$hMain_GUI = GUICreate("Диагностика и Настройка", 619, 442, 189, 122)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
_IconCom()

$Tab1 = GUICtrlCreateTab(8, 16, 601, 377)
    $HotfixErrors = GUICtrlCreateTabItem("HotfixErrors")
        $Button_HotFixesUpdate = GUICtrlCreateButton("Обновить", 510, 400, 85, 33, 0)
        _GUICtrlButton_SetImageList($Button_HotFixesUpdate, $hImageListCom[2])
        GUICtrlSetOnEvent($Button_HotFixesUpdate, "_HotFixes_Update")
_ServicesStat()
        $Icon_HotfixErrors = GUICtrlCreateIcon("shell32.dll", 23, 115, 348, 16, 16)
                $Icon_Hotfix = GUICtrlCreateIcon("shell32.dll", 28, 115, 361, 16, 16)

        $Hotfix = GUICtrlCreateTabItem("Hotfix")


GUICtrlCreateTabItem("")
GUISetState()

While 1
    Sleep(1000)
WEnd

Func CLOSEClicked()
  Exit
EndFunc

Func _IconCom()

  If @Compiled Then
    For $iListCom = 0 To 3

        $hImageListCom[$iListCom] = _GUIImageList_Create(16, 16, 5, 3, 6)

        Local $aImageCom[5] = [$iListCom, $iListCom, $iListCom, $iListCom, $iListCom] ; [Иконка наложения , при наведении , при нажатии , нет ,  иконка после нажатия на кнопку]

        For $f = 0 To UBound($aImageCom) - 1
            _GUIImageList_AddIcon($hImageListCom[$iListCom], @ScriptFullPath, $aImageCom[$f], True)
        Next

    Next
  EndIf
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 = ''

;  запрос информации о состоянии служб (текущее состояние: работает или нет)
 $hIPconfig1_1 = Run('sc query wuauserv', '', @SW_HIDE, "")
;  запрос информации о типе запуска служб (авто, вручную, отключено)
 $hIPconfig1_2 = Run('sc qc wuauserv', '', @SW_HIDE, "")

 While 1
    $sLogI1_1 &= StdoutRead($hIPconfig1_1)
    $sLogI1_2 &= StdoutRead($hIPconfig1_2)

    If @error Then ExitLoop
    Sleep(10)
 WEnd

; фильтрация информации о службах
  $sLog1_1 = StringRegExpReplace($sLogI1_1, "(?si).*STATE\D*(\d+).*", '\1')
  $sLog1_2 = StringRegExpReplace($sLogI1_2, "(?si).*START_TYPE\D*(\d+).*", '\1')

; программиорование отображение информации о службах через иконки
IF $sLog1_1 = 4  Then
;~  GuiCtrlSetData($Pic1_1, 2)
    GUICtrlSetImage($Icon_Hotfix, "shell32.dll", 5)
Else
;~    GuiCtrlSetData($Pic1_1, 1)
    GUICtrlSetImage($Icon_Hotfix, "shell32.dll", 18)
EndIf

IF $sLog1_2 = 2  Then
;~  GuiCtrlSetData($Pic1_2, 2)
    GUICtrlSetImage($Icon_HotfixErrors, "shell32.dll", 9)
Else
;~    GuiCtrlSetData($Pic1_2, 1)
    GUICtrlSetImage($Icon_HotfixErrors, "shell32.dll", 43)
EndIf

EndFunc



FlatX007, индикаторы служат для сигнализации службы обновления

Попробуйте сделать следующее:
1. запустить скрипт
2. нажать на кнопку обновить - > иконки поменялись
3. заходим Панель управления -> администрирование -> службы и меняем у Автоматического обновления статус и тип запуска
4. жмем на обновить - > иконки не поменялись..

Я уже просто в тихом трансе. Из-за этих иконок не могу собрать утилиту. Знал бы -заменил на сигнализацию цветом, блин...

FlatX007 02-10-2010 05:51 1509437

Я разобрался StringRegExpReplace - не срабатывал, а следовательно возвращал полную информацию вместо 2,4 ...
Код:

; фильтрация информации о службах
  $sLog1_1 = StringRegExpReplace($sLogI1_1, "(?si).*STATE\D*(\d+).*", '\1')
  $sLog1_2 = StringRegExpReplace($sLogI1_2, "(?si).*START_TYPE\D*(\d+).*", '\1')

Из консольного потока русские символы читаются в виде крокозябр, поэтому шаблон не подходил!
Правильно будет так:
Код:

#include <Encoding.au3>

; фильтрация информации о службах
$sLog1_1 = StringRegExpReplace(_Encoding_CyrillicTo1251($sLogI1_1), "(?si).*Состояние\D*(\d+).*", '\1')
$sLog1_2 = StringRegExpReplace(_Encoding_CyrillicTo1251($sLogI1_2), "(?si).*Тип_запуска\D*(\d+).*", '\1')

У меня у самого скоро транс будет, я думаю вам стоит заняться чем нибудь полегче, для наблотыкивания :)

saavaage 02-10-2010 13:11 1509566

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

;  запрос информации о состоянии служб (текущее состояние: работает или нет)
 $hIPconfig1_1 = Run('sc query wuauserv', '', @SW_HIDE, "")
;  запрос информации о типе запуска служб (авто, вручную, отключено)
 $hIPconfig1_2 = Run('sc qc wuauserv', '', @SW_HIDE, "")

правильно, конечно же так:

Код:

;  запрос информации о состоянии служб (текущее состояние: работает или нет)
$hIPconfig1_1 = Run('sc query wuauserv', '', @SW_HIDE, $STDOUT_CHILD)
;  запрос информации о типе запуска служб (авто, вручную, отключено)
 $hIPconfig1_2 = Run('sc qc wuauserv', '', @SW_HIDE, $STDOUT_CHILD)

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

PS Полегче - не получится, т.к. уже поставил перед собой задачу и практически ее сделал, может сегодня - завтра выложу свою контрольную работу на тему "Введение в Autoit" на обсуждение ошибок...

saavaage 02-10-2010 13:43 1509583

FlatX007, весьма странно, но у меня все прекрасно отрабатывает без перегонки в формат с перекодировкой.
Windows XP Pro Ru SP3, не совсем понимаю, почему у вас идет русский вывод информации о службах, у меня все на английском.
Собственно поэтому я и убрал тут перекодировку... Не подскажите, что у Вас за система? Неужели, прийдется еще вводить проверку и на рус/англ?

saavaage 02-10-2010 14:22 1509605

Таким образом, рабочий код (при условии, что у вас XPPro Rus SP3):

читать дальше »
Код:

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=Ico\Windows.ico
#AutoIt3Wrapper_outfile=Output\Test.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseUpx=n
#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\Windows.ico, Icon, 1, 0
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -add %out%, %out%, Ico\error.ico, Icon, 0, 0
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -add %out%, %out%, Ico\ok.ico, Icon, 2, 0
#AutoIt3Wrapper_Run_After=Utilities\ResHacker\ResHacker.exe -add %out%, %out%, Ico\refresh.ico, Icon, 3, 0
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
;~ #AutoIt3Wrapper_Run_After=ResHacker.exe -add %out%, %out%, MySound.wav, SOUND, 200, 0
#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 <WindowsConstants.au3>

;~ #Include <Resources.au3>

Global $Pic1_1, $Pic1_2, $P1_1, $P1_2, $sLogI1_1, $sLogI1_2
Global $sLog1_2, $sLog1_1
Global $hImageListCom[4]




Opt("GUIOnEventMode", 1)

$hMain_GUI = GUICreate("Диагностика и Настройка", 619, 442, 189, 122)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
_IconCom()

$Tab1 = GUICtrlCreateTab(8, 16, 601, 377)

$HotfixErrors = GUICtrlCreateTabItem("HotfixErrors")
$Button_HotFixesUpdate = GUICtrlCreateButton("Обновить", 510, 400, 85, 33, 0)
_GUICtrlButton_SetImageList($Button_HotFixesUpdate, $hImageListCom[2])
GUICtrlSetOnEvent($Button_HotFixesUpdate, "_HotFixes_Update")


$Icon1 = GUICtrlCreateIcon('', '', 115, 348, 16, 16)
$Icon2 = GUICtrlCreateIcon('', '', 115, 361, 16, 16)
_ServicesStat()

; запуск и сбор информации о текущем состоянии служб
$Hotfix = GUICtrlCreateTabItem("Hotfix")

GUICtrlCreateTabItem("")

GUISetState()

While 1
    Sleep(100)
WEnd

Func CLOSEClicked()
  Exit
EndFunc

Func _IconCom()

  If @Compiled Then
        For $iListCom = 0 To 3

                $hImageListCom[$iListCom] = _GUIImageList_Create(24, 24, 5, 3, 6)

                Local $aImageCom[5] = [$iListCom, $iListCom, $iListCom, $iListCom, $iListCom] ; [Иконка наложения , при наведении , при нажатии , нет ,  иконка после нажатия на кнопку]

                For $f = 0 To UBound($aImageCom) - 1
                        _GUIImageList_AddIcon($hImageListCom[$iListCom], @ScriptFullPath, $aImageCom[$f], True)
                Next

        Next
  EndIf
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 = ''

;  запрос информации о состоянии служб (текущее состояние: работает или нет)
 $hIPconfig1_1 = Run('sc query wuauserv', '', @SW_HIDE, $STDOUT_CHILD)
;  запрос информации о типе запуска служб (авто, вручную, отключено)
 $hIPconfig1_2 = Run('sc qc wuauserv', '', @SW_HIDE, $STDOUT_CHILD)

 While 1
    $sLogI1_1 &= StdoutRead($hIPconfig1_1)
        $sLogI1_2 &= StdoutRead($hIPconfig1_2)

        If @error Then ExitLoop
    Sleep(10)
 WEnd

; фильтрация информации о службах
  $sLog1_1 = StringRegExpReplace($sLogI1_1, "(?si).*STATE\D*(\d+).*", '\1')
  $sLog1_2 = StringRegExpReplace($sLogI1_2, "(?si).*START_TYPE\D*(\d+).*", '\1')

; программиорование отображение информации о службах через иконки
IF $sLog1_1 = 4  Then
        GUICtrlSetImage($Icon1, @ScriptFullPath, 2)
Else
    GUICtrlSetImage($Icon1, @ScriptFullPath, 0)
EndIf

IF $sLog1_2 = 2  Then
        GUICtrlSetImage($Icon2, @ScriptFullPath, 2)
Else
        GUICtrlSetImage($Icon2, @ScriptFullPath, 0)
EndIf

EndFunc



Если не отрабатывает сигнализация, то заменить условие фильтрации на :

читать дальше »
Код:

; фильтрация информации о службах
$sLog1_1 = StringRegExpReplace(_Encoding_CyrillicTo1251($sLogI1_1), "(?si).*Состояние\D*(\d+).*", '\1')
$sLog1_2 = StringRegExpReplace(_Encoding_CyrillicTo1251($sLogI1_2), "(?si).*Тип_запуска\D*(\d+).*", '\1')



Проверьте еще раз, пожалуйста, FlatX007. Архив с иконками и прочим - в аттаче http://ifolder.ru/19573601

FlatX007 02-10-2010 18:52 1509763

У меня Win 7 не срабатывает пример, переменная $sLog1_1 - возвращает это:

Код:

?¬п_б«г¦Ўл: wuauserv
        ’ЁЇ                : 20  WIN32_SHARE_PROCESS 
        ‘®бв®п*ЁҐ          : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_PRESHUTDOWN)
        Љ®¤_ўл室*_Win32  : 0  (0x0)
        Љ®¤_ўл室*_б«г¦Ўл  : 0  (0x0)
        Љ®*ва®«м**п_в®зЄ*  : 0x0
        Ћ¦Ё¤**ЁҐ          : 0x0


Нужно делать два! щаблона на XP и на Win Vista, 7 ...мой пример объединить с вашим.

saavaage 02-10-2010 19:05 1509772

FlatX007, Пока у мея стоит, к сожалению, только XP. Я и делал утилиту под нее. Без 7 на борту невозможно будет проверить как и что работает.
Вобщем, выкладываю на форуме для тестинга то, что получилось. Спасибо Вам большое, последние 3 дня, благодаря этой проблеме, чуть меня с ума не свели. Но теперь, по крайней мере разобрался, что и как.

FlatX007, как будет SP1 по 7-ке, тогда поставлю новую ось и начну адаптацию...


Время: 19:40.

Время: 19:40.
© OSzone.net 2001-