Что нового

[Автоматизация] Не отрабатывает вторая функция если выбрано более одной.

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Здравствуйте.
Использую AutoIt: v3.3.8.1

Подскажите, что не так. При выборе нескольких "чекбоксов" (т.е. нескольких функций) первый отрабатывает, а второй нет.

Код:
#include <GUIConstantsEx.au3>
#include <GUIConstants.au3>
#include <INet.au3>
#include <WinAPIEx.au3>
#include <File.au3>
#include <Array.au3>
#include <Zip_UDF.au3>
Global $Chack1 = False, $Chack2 = False, $Chack3 = False, $Chack4 = False
$URL = 'http://devbuilds.kaspersky-labs.com/devbuilds/AVPTool/avptool11/'
$HTML = _INetGetSource($URL)
$Reg = StringRegExp($HTML, '<a href="(.*?)"', 3)
$sUrl = 'http://samlab.ws/category/antivirus/'
$sSourse = InetRead($sUrl, 17)
$Form1 = GUICreate("DAU", 200, 160)
GUICtrlCreateLabel("Загрузить антивирусные утилиты", 15, 10)
$Checkbox1 = GUICtrlCreateCheckbox("Dr.WEB-CureIt", 8, 40)
$Checkbox2 = GUICtrlCreateCheckbox("KasperskyAVPTool", 8, 60)
$Checkbox3 = GUICtrlCreateCheckbox("Malwarebytes", 8, 80)
$Checkbox4 = GUICtrlCreateCheckbox("AVZ", 8, 100)
$Button1 = GUICtrlCreateButton("Загрузить", 55, 130, 90)

GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Checkbox1
            If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then
                $Chack1 = True
            Else
                $Chack1 = False
            EndIf
        Case $Checkbox2
            If GUICtrlRead($Checkbox2) = $GUI_CHECKED Then
                $Chack2 = True
            Else
                $Chack2 = False
            EndIf
        Case $Checkbox3
            If GUICtrlRead($Checkbox3) = $GUI_CHECKED Then
                $Chack3 = True
            Else
                $Chack3 = False
            EndIf
        Case $Checkbox4
            If GUICtrlRead($Checkbox4) = $GUI_CHECKED Then
                $Chack4 = True
            Else
                $Chack4 = False
            EndIf          
        Case $Button1
            If $Chack1 Then _1()
            If $Chack2 Then _2()
            If $Chack3 Then _3()
            If $Chack4 Then _4()   
            If (Not $Chack1) And (Not $Chack2) And (Not $Chack3) And (Not $Chack4) Then
                MsgBox(16, 'Error', 'Ничего не выбрано!!!')
            EndIf
    EndSwitch
WEnd
 
Func _1()
    GUISetState(@SW_HIDE)
   ProgressOn('Скачивание файла', 'Dr.WEB-CureIt', '0 %')
$hDownload = InetGet('http://download.geo.drweb.com/pub/drweb/cureit/drweb-cureit.exe', @ScriptDir & '\drweb-cureit.exe', 1, 1)
Do
    If InetGetInfo($hDownload, 1) Then
        $iPersent = Round((InetGetInfo($hDownload, 0) / InetGetInfo($hDownload, 1)) * 100)
        ProgressSet($iPersent, $iPersent & ' %, ' & _WinAPI_StrFormatByteSize(InetGetInfo($hDownload, 0)) & _
                ' (' & _WinAPI_StrFormatByteSize(InetGetInfo($hDownload, 1)) & ')')
    EndIf
    Sleep(500)
Until InetGetInfo($hDownload, 2)
InetClose($hDownload)
ProgressOff()  

EndFunc   ;==>_1

Func _2()
    GUISetState(@SW_HIDE)
   ProgressOn('Скачивание файла', 'KasperskyAVPTool', '0 %')
$hDownload = InetGet($URL & $Reg[UBound($Reg) - 1], @ScriptDir & '\' & $Reg[UBound($Reg) - 1], 1, 1)
Do
    If InetGetInfo($hDownload, 1) Then
        $iPersent = Round((InetGetInfo($hDownload, 0) / InetGetInfo($hDownload, 1)) * 100)
        ProgressSet($iPersent, $iPersent & ' %, ' & _WinAPI_StrFormatByteSize(InetGetInfo($hDownload, 0)) & _
                ' (' & _WinAPI_StrFormatByteSize(InetGetInfo($hDownload, 1)) & ')')
    EndIf
    Sleep(500)
Until InetGetInfo($hDownload, 2)
InetClose($hDownload)
ProgressOff()

EndFunc   ;==>_2

Func _3()
    GUISetState(@SW_HIDE)
   If @error Then
    MsgBox(16, 'Error', 'InetRead')
    Exit
 EndIf
$sSourse = BinaryToString($sSourse)
$sLink = StringRegExpReplace($sSourse, '(?s).*href="(http://data-cdn.mbamupdates.com/.*?exe)">.*', '$1')
If @extended = 1 Then
    $sFileName = StringRegExpReplace($sLink, '', '')
    ;MsgBox(0, 'Info', $sFileName)
Else
    MsgBox(16, 'Error', 'StringRegExpReplace')
    Exit
EndIf
   ProgressOn('Скачивание файла', 'MBAM', '0 %')
$hDownload = InetGet($sFileName, @ScriptDir & '\mbam-setup.exe', 1, 1)
Do
    If InetGetInfo($hDownload, 1) Then
        $iPersent = Round((InetGetInfo($hDownload, 0) / InetGetInfo($hDownload, 1)) * 100)
        ProgressSet($iPersent, $iPersent & ' %, ' & _WinAPI_StrFormatByteSize(InetGetInfo($hDownload, 0)) & _
                ' (' & _WinAPI_StrFormatByteSize(InetGetInfo($hDownload, 1)) & ')')
    EndIf
    Sleep(500)
Until InetGetInfo($hDownload, 2)
InetClose($hDownload)
ProgressOff()  
EndFunc   ;==>_3

Func _4()
   GUISetState(@SW_HIDE)
   ProgressOn('Скачивание файла', 'AVZ', '0 %')
$hDownload = InetGet('http://z-oleg.com/avz4.zip', @ScriptDir & '\avz4.zip', 1, 1)
Do
    If InetGetInfo($hDownload, 1) Then
        $iPersent = Round((InetGetInfo($hDownload, 0) / InetGetInfo($hDownload, 1)) * 100)
        ProgressSet($iPersent, $iPersent & ' %, ' & _WinAPI_StrFormatByteSize(InetGetInfo($hDownload, 0)) & _
                ' (' & _WinAPI_StrFormatByteSize(InetGetInfo($hDownload, 1)) & ')')
    EndIf
    Sleep(500)
Until InetGetInfo($hDownload, 2)
InetClose($hDownload)
ProgressOff()

; Parameters for test
$ZipFile = @ScriptDir & "\avz4.zip"
$DestFolder = @ScriptDir

$UseExternalZipApp = False

ProgressOn('Распаковка архива', 'avz4.zip', '0 %')

$size = DirGetSize($DestFolder)

$RetCode = _UnZip($ZipFile, $DestFolder)

Do
If $RetCode Then
ProgressSet($iPersent, $iPersent&'%,'&_WinAPI_StrFormatByteSize($size)&'('&_WinAPI_StrFormatByteSize($size)&')')
EndIf
Sleep(500)
Until $size
ProgressOff()
FileDelete(@ScriptDir & "\avz4.zip")
EndFunc   ;==>_4
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
ivsatel,
Попробуйте так.
Код:
#include <GUIConstantsEx.au3>

Global $aCheckbox[5] = [4, 'Dr.WEB-CureIt', 'KasperskyAVPTool', 'Malwarebytes', 'AVZ']

$hGui = GUICreate("DAU", 200, 160)
GUICtrlCreateLabel("Загрузить антивирусные утилиты", 15, 10)
For $i = 1 To $aCheckbox[0]
	$aCheckbox[$i] = GUICtrlCreateCheckbox($aCheckbox[$i], 8, 40 + ($i - 1) * 20)
Next
$nButton1 = GUICtrlCreateButton("Загрузить", 55, 130, 90)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton1
			$iCount = 0
			For $i = 1 To $aCheckbox[0]
				If BitAND(GUICtrlRead($aCheckbox[$i]), $GUI_CHECKED) Then
					$iCount += 1
					Execute('_' & $i & '()')
					ConsoleWrite(@error & @LF)
				EndIf
			Next
			If Not $iCount Then
				MsgBox(16, 'Error', 'Ничего не выбрано!!!', 0, $hGui)
			EndIf
	EndSwitch
WEnd

Func _1()
	ConsoleWrite('Func _1()' & @LF)
	Return SetError(1);для примера
EndFunc   ;==>_1

Func _2()
	ConsoleWrite('Func _2()' & @LF)
	Return SetError(2);для примера
EndFunc   ;==>_2

Func _3()
	ConsoleWrite('Func _3()' & @LF)
	Return SetError(3);для примера
EndFunc   ;==>_3

Func _4()
	ConsoleWrite('Func _4()' & @LF)
	Return SetError(4);для примера
EndFunc   ;==>_4
PS
Ваши функции не проверял.
 
Верх