Код:

#include <ButtonConstants.au3>
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <Icons.au3>
#include <WinAPI.au3>
Global $pic1_1, $pic3_1, $pic1_2, $pic2_2, $pic3_2, $sLogI1_1, $sLogI1_2, $sLogI2_2, $sLogI3_1, $sLogI3_2
Global $Save_Event, $Save_MU, $Save_BITS, $sLog1_2, $sLog2_2, $sLog3_2, $sLog1_1, $sLog3_1
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")
$Button_HotFixesUpdate = GUICtrlCreateButton("Обновить", 84, 400, 60, 33, $BS_MULTILINE)
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)
; запуск и сбор информации о текущем состоянии служб
_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()
While 1
Sleep(100)
WEnd
Func CLOSEClicked()
Exit
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')
; программиорование отображение информации о службах через иконки
Dim $aIcons[2]=['error.ico','ok.ico']
$pic1_1=$aIcons[$sLog1_1=4]
$pic3_1=$aIcons[$sLog3_1=4]
$pic1_2=$aIcons[$sLog1_2=2]
$pic2_2=$aIcons[(($sLog2_2 = 3) Or ($sLog2_2 = 2))]
$pic3_2=$aIcons[$sLog1_2=2]
_ImageGet()
EndFunc
; функция отображения иконок на конкрентой вкладке формы (форма с Tab)
Func _ImageGet()
$Width = 14
$Height = 14
$hIcon1_1 = _Icons_Icon_Extract($pic1_1, -3, $Width, $Height)
$hBitmap1_1 = _Icons_Bitmap_CreateFromIcon($hIcon1_1)
$Pic1_1 = GUICtrlCreatePic('', 115, 348, $Width, $Height)
_SetHImage(-1, $hBitmap1_1)
$hIcon3_1 = _Icons_Icon_Extract($pic3_1, -3, $Width, $Height)
$hBitmap3_1 = _Icons_Bitmap_CreateFromIcon($hIcon3_1)
$Pic3_1 = GUICtrlCreatePic('', 355, 348, $Width, $Height)
_SetHImage(-1, $hBitmap3_1)
$hIcon1_2 = _Icons_Icon_Extract($pic1_2, -3, $Width, $Height)
$hBitmap1_2 = _Icons_Bitmap_CreateFromIcon($hIcon1_2)
$Pic1_2 = GUICtrlCreatePic('', 115, 361, $Width, $Height)
_SetHImage(-1, $hBitmap1_2)
$hIcon2_2 = _Icons_Icon_Extract($pic2_2, -3, $Width, $Height)
$hBitmap2_2 = _Icons_Bitmap_CreateFromIcon($hIcon2_2)
$Pic2_2 = GUICtrlCreatePic('', 249, 361, $Width, $Height)
_SetHImage(-1, $hBitmap2_2)
$hIcon3_2 = _Icons_Icon_Extract($pic3_2, -3, $Width, $Height)
$hBitmap3_2 = _Icons_Bitmap_CreateFromIcon($hIcon3_2)
$Pic3_2 = GUICtrlCreatePic('', 355, 361, $Width, $Height)
_SetHImage(-1, $hBitmap3_2)
_WinAPI_DeleteObject($hBitmap1_1)
_WinAPI_DeleteObject($hBitmap3_1)
_WinAPI_DeleteObject($hBitmap1_2)
_WinAPI_DeleteObject($hBitmap2_2)
_WinAPI_DeleteObject($hBitmap3_2)
_WinAPI_DestroyIcon($hIcon1_1)
_WinAPI_DestroyIcon($hIcon3_1)
_WinAPI_DestroyIcon($hIcon1_2)
_WinAPI_DestroyIcon($hIcon2_2)
_WinAPI_DestroyIcon($hIcon3_2)
EndFunc
;; End Hotfixes Section ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;