Что нового

Окна, Диалоги помогите поправить код

Jan-Jak

Новичок
Сообщения
48
Репутация
1
Здравствуйте. Не работпет обработка ошибок в заполнении полей. Как поправить, что бы после ввода пароля обрабатывалось состояние флешки.
Код:
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>


Global Const $DBT_DEVICEARRIVAL = 0x8000 ; Найдено новое устройство
Global Const $DBT_DEVICEREMOVECOMPLETE = 0x8004 ; Устройство отключено
Global Const $DBT_DEVTYP_VOLUME = 0x00000002 ; Логический диск

Global $iDrive= 0

Local $hGui, $msg, $Input1, $Input2, $Input3, $BtnOk, $sText, $iDrive

$hGui = GUICreate("Установцик USBWinlock", 380, 170, @DesktopWidth / 2 - 190, @DesktopHeight / 2 - 80, -1, $WS_EX_ACCEPTFILES)
$Input1 = GUICtrlCreateInput(@AppDataCommonDir, 10, 70, 360, 22, -1, $WS_EX_DLGMODALFRAME)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)

$Input3 = GUICtrlCreateInput("Введите пароль", 60, 105, 310, 22, -1, $WS_EX_DLGMODALFRAME)

$BtnOk = GUICtrlCreateButton("OK", (380 - 70) / 2, 135, 70, 26)
GUISetBkColor(0xB4E1D3)
GUISetFont(9, 300)
GUICtrlCreateLabel('Для установки ключа доступа необходим USB FLASH. Попробуйте вставить флешку для продолжения генерации ключей.', 20, 5, 360, 50)

GUISetFont(9, 400, 4) ; отображает подчёркнутые символы
GUICtrlCreateLabel('Путь установки приложения:',  20, 50, 360, 20)


GUISetState()


While 1
    GUIRegisterMsg($WM_DEVICECHANGE, "WM_DEVICECHANGE")
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $BtnOk
            $Dir = GUICtrlRead($Input1)
                If FileExists ( $Dir ) = 0 Then
                        MsgBox(4096, "", "Путь для установки не существует")
                ElseIf GUICtrlRead($Input3) = "Введите пароль" Then
                        MsgBox(4096, "", "Не заполненно поле с паролем.")
                    Else
                        If GUICtrlRead ($Input3) = 0 Then
                        MsgBox(4096, "", "Не выбран USB flash")
                Else
                        $sText = ''
                        $sText &= 'Input1 = ' & GUICtrlRead($Input1) & @CRLF
                        $sText &= 'Input2 = ' & GUICtrlRead($Input2) & @CRLF
                        $sText &= 'Input3 = ' & GUICtrlRead($Input3) & @CRLF
                                MsgBox(0, "Результат", $sText, 0, $hGui)
                    EndIf
                EndIf

    EndSwitch
WEnd

Func WM_DEVICECHANGE($hWnd, $Msg, $wParam, $lParam)



    If ($wParam = $DBT_DEVICEARRIVAL) Or ($wParam = $DBT_DEVICEREMOVECOMPLETE) Then
        Local $DEV_BROADCAST_VOLUME = DllStructCreate("int dbcvsize;int dbcvdevicetype;int dbcvreserved;int dbcvunitmask;" & _
                "ushort dbcvflags", $lParam)
        Local $iDriveType = DllStructGetData($DEV_BROADCAST_VOLUME, "dbcvdevicetype")
    Else
        Return $GUI_RUNDEFMSG
    EndIf

    ; Если устройство не является логическим диском, то выход из функции
    If $iDriveType <> $DBT_DEVTYP_VOLUME Then Return $GUI_RUNDEFMSG

    Local $iMask = DllStructGetData($DEV_BROADCAST_VOLUME, "dbcvunitmask")
    $iMask = Log($iMask) / Log(2)

    Local $iDrive = Chr(65 + $iMask) & ":"

    $Input2 = GUICtrlCreateLabel($iDrive, 10, 105, 40, 22, -1, $WS_EX_DLGMODALFRAME)


GUICtrlCreateLabel( 'Вы подключили USB FLASH с именем:    ' & $iDrive & @CRLF & @CRLF & @CRLF & 'Путь установки:', 20, 5, 360, 50)
    Switch $wParam
        Case $DBT_DEVICEARRIVAL ; обнаружение устройства
            GUICtrlCreateLabel( 'Вы подключили USB FLASH с именем:    ' & $iDrive & @CRLF & @CRLF & @CRLF & 'Путь установки:', 20, 5, 360, 50)
            TrayTip("USB FLASH", "Устройство подключено", 5, 1)

        Case $DBT_DEVICEREMOVECOMPLETE ; отключение устройства
            GUICtrlCreateLabel( 'Вы отключили USB FLASH с именем:    ' & $iDrive & @CRLF & @CRLF & @CRLF & 'Путь установки:', 20, 5, 360, 50)
            TrayTip("USB FLASH", "Устройство отключено", 5, 2)

    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc
GUISetState()
 
Верх