Ветеран
Сообщения: 904
Благодарности: 162
|
Профиль
|
Отправить PM
| Цитировать
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. жмем на обновить - > иконки не поменялись..
Я уже просто в тихом трансе. Из-за этих иконок не могу собрать утилиту. Знал бы -заменил на сигнализацию цветом, блин...
|