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()