Что нового

[Окна, Диалоги] Помогите переделать скрипт "запрос пароля при запуске"

HaeMHuK

Новичок
Сообщения
43
Репутация
0
я на форуме нашел 1 срипт, а второй мне мне написали тут же (FlatX007)
есть одно но, меня оба устраивают, но в каждом есть проблема, которую мне нужно исправить.
1й простой, но когда закрываешь или жмешь "отмена" он просто пишет, что пароль неправелен. скрипт закрывается только в том случае, если ввести правильно пароль.
Можно конечно исправить
Код:
Else
MsgBox(0, '', 'Sorry pall, wrong password. Try again')

на
Код:
Else
MsgBox(0, '', 'Sorry pall, wrong password. Try again')
ExitLoop

Но тогда, если пароль введешь не правильно скрипт закрывается, а не предлагает попробовать еще раз + если закрываешь, то выскакиевает окно "Sorry pall, wrong password. Try again", что не очень правильно.

Код:
$superpass = 'qwerty'
While 1
    $i  = InputBox('Super script', 'Enter password', '', '*')
    If StringCompare($i, $superpass) = 0 Then
        MsgBox(0, '', 'ta da... password is right')
        ExitLoop
    Else
        MsgBox(0, '', 'Sorry pall, wrong password. Try again')
    EndIf
WEnd


Есть второй от (FlatX007). Но тут есть также проблема. Когда вводишь правильный пароль, загружается мой GUI, но окно ввода пароля остается на заднем плане. Если его закрыть, то и мой GUI закроется.


Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Global Const $sPASSVORD = 1234 ; Пароль для сравнения
$sGUI_NAME = "Ввоод пароля"
$sLIMIT_SIMBOL = 25

$sTextCheckbox1 = "Отображать вводимые символы"

$nFormPassvord = GUICreate($sGUI_NAME, 310, 144, 488, 351)
$Input1 = GUICtrlCreateInput("", 16, 32, 281, 21, BitOR($ES_PASSWORD,$ES_AUTOHSCROLL,$WS_BORDER))
    GUICtrlSetLimit(-1, $sLIMIT_SIMBOL)
$Input2 = GUICtrlCreateInput("", 16, 32, 281, 21, BitOR($ES_AUTOHSCROLL,$WS_BORDER))
    GUICtrlSetLimit(-1, $sLIMIT_SIMBOL)
        GUICtrlSetState(-1, $GUI_HIDE)
$Button1 = GUICtrlCreateButton("&Ok", 224, 112, 75, 25, $BS_DEFPUSHBUTTON)
        GUICtrlSetTip(-1, "Проверить")
$Group1 = GUICtrlCreateGroup(" Введите пароль ", 8, 8, 297, 97)
$Checkbox1 = GUICtrlCreateCheckbox($sTextCheckbox1, 16, 72, 193, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)

GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit

        Case $Button1
            If GUICtrlGetState($Input1) = 80 Then
                If GUICtrlRead($Input1) <> $sPASSVORD Then
                    MsgBox(48,"","Не верный пароль")
                Else
                    MsgBox(64,"","Верный пароль")
                    Exit
                EndIf
            Else
                If GUICtrlRead($Input2) <> $sPASSVORD Then
                    MsgBox(48,"","Не верный пароль")
                Else
                    MsgBox(64,"","Верный пароль")
                    Exit
                EndIf
            EndIf

    EndSwitch
WEnd

Func WM_COMMAND($nHnwd, $MsgID, $WParam, $LParam)
    Local $iIDFrom = BitAND($WParam, 0xFFFF) ; Low Word
    Local $iCode = BitShift($WParam, 16) ; Hi Word
    Local $aRead[2] = [GUICtrlRead($iIDFrom), GUICtrlRead($iIDFrom, 1)]

    If $aRead[1] = $sTextCheckbox1 Then
        If GUICtrlRead($Checkbox1) = 4 Then
            GUICtrlSetState($Input1, $GUI_SHOW)
            GUICtrlSetState($Input2, $GUI_HIDE)
            GUICtrlSetData($Input1, GUICtrlRead($Input2))
            GUICtrlRead($Input2)
        Else
            GUICtrlSetState($Input2, $GUI_SHOW)
            GUICtrlSetState($Input1, $GUI_HIDE)
            GUICtrlSetData($Input2, GUICtrlRead($Input1))
            GUICtrlRead($Input1)
        EndIf
    EndIf

    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND


Вот пример ГУИ, который должен загружатся после ввода правильного пароля.
Код:
#include <GUIConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("Form2", 405, 294, 303, 219)
$Button1 = GUICtrlCreateButton("Button1", 17, 59, 117, 55, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit

EndSwitch
WEnd


Что посоветует в этой ситуации?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Re: [Окна, Диалоги] Помошите переделать скрипт "запрос пароля при запуске"

Вот так выйдет из скрипта, если ничего не вводить
Код:
$superpass = 'qwerty'
While 1
    $i  = InputBox('Super script', 'Enter password', '', '*')
    If StringCompare($i, $superpass) = 0 Then
        MsgBox(0, '', 'ta da... password is right')
        ExitLoop
    ElseIf Not $i Then
		Exit
	Else
        MsgBox(0, '', 'Sorry pall, wrong password. Try again')
    EndIf
WEnd
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 401
Re: [Окна, Диалоги] Помошите переделать скрипт "запрос пароля при запуске"

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>

Global Const $sPASSWORD = 1234 ; Пароль для сравнения

_InputPasswordBox()
If @error Then Exit

$Form2 = GUICreate("Form2", 405, 294, 303, 219)
$Button1 = GUICtrlCreateButton("Button1", 17, 59, 117, 55, 0)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func _InputPasswordBox()
	$hPass_GUI = GUICreate("Ввод пароля", 310, 144, 488, 351)
	
	$nPass_Input = GUICtrlCreateInput("", 16, 32, 281, 21)
	_GUICtrlEdit_TogglePassChars($hPass_GUI, $nPass_Input, -1, "•")
	GUICtrlSetLimit(-1, 25)
	
	$nOk_Button = GUICtrlCreateButton("&Ok", 224, 112, 75, 25, $BS_DEFPUSHBUTTON)
	GUICtrlSetTip(-1, "Проверить")
	
	GUICtrlCreateGroup(" Введите пароль ", 8, 8, 297, 97)
	$nShowPass_Chckbx = GUICtrlCreateCheckbox("Отображать вводимые символы", 16, 72, 193, 17)
	
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	GUISetState(@SW_SHOW)
	
	While 1
		Switch GUIGetMsg()
			Case $GUI_EVENT_CLOSE
				Return SetError(1)
			Case $nOk_Button
				If GUICtrlRead($nPass_Input) <> $sPASSWORD Then
					MsgBox(48, "", "Не верный пароль", 0, $hPass_GUI)
				Else
					MsgBox(64, "", "Верный пароль", 0, $hPass_GUI)
					GUIDelete($hPass_GUI)
					Return SetError(0)
				EndIf
			Case $nShowPass_Chckbx
				_GUICtrlEdit_TogglePassChars($hPass_GUI, $nPass_Input, -1, "•")
		EndSwitch
	WEnd
EndFunc

Func _GUICtrlEdit_TogglePassChars($hWnd, $hCtrl, $iToggleState = -1, $sPassChar = "*")
	If Not IsHWnd($hWnd) Then $hWnd = WinGetHandle($hWnd)
	If Not IsHWnd($hCtrl) Then $hCtrl = ControlGetHandle($hWnd, "", $hCtrl)

	Local Const $EM_SETPASSWORDCHAR = 0xCC
	Local Const $EM_GETPASSWORDCHAR = 0xD2

	Local $iPass_Char = 0
	Local $aRet = DllCall("user32.dll", "long", "SendMessage", "hwnd", $hCtrl, "int", $EM_GETPASSWORDCHAR, "int", 0, "int", 0)

	If IsArray($aRet) And Not $aRet[0] Then $iPass_Char = Asc($sPassChar)

	If $iToggleState = 0 Then $iPass_Char = 0

	DllCall("user32.dll", "long", "SendMessage", "hwnd", $hCtrl, "int", $EM_SETPASSWORDCHAR, "int", $iPass_Char, "int", 0)
	ControlFocus($hWnd, "", $hCtrl)
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
HaeMHuK
Можно так попробовать:
Код:
#include <GUIConstants.au3>

$iNumber = 3 ;кол-во попыток ввода пароля

$sControl_Pass = 'qwerty'
For $i = 1 To $iNumber
	$sPass = InputBox('Ввод пароля', 'Введите пароль', '', '*')
	If @error Or Not $sPass Then Exit ;отмена, закрыть или ничего не ввели - выход.
	$iCheck = StringCompare($sPass, $sControl_Pass, 1)
	Switch $iCheck
		Case 0
			MsgBox(64, 'OK', 'Пароль правильный!', 3)
			ExitLoop
		Case Else
			If $iNumber - $i Then
				MsgBox(16, 'Error', 'Пароль не правильный.' & @LF & 'Осталось попыток ввода: ' & _
						$iNumber - $i, 5)
			Else
				MsgBox(16, 'Error', 'Попыток ввода пароля: ' & $iNumber & ', и ни одной правильной!' & @LF & _
						'До свидания!', 5)
				Exit
			EndIf
	EndSwitch
Next

$Form2 = GUICreate("Form2", 405, 294, 303, 219)
$Button1 = GUICtrlCreateButton("Button1", 17, 59, 117, 55, 0)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd
 

drd0s

Новичок
Сообщения
19
Репутация
2
Код:
#include <GUIConstantsEx.au3>
Global $P1Win,$P2Win
Call("_main")

Func ChPws($hwmd_imp) ;Проверка пароля.
	$passwd_tx = "0000" ;Пароль.
	IF StringLen(GUICtrlRead($hwmd_imp)) <> 0 Then ;IF_BLOCK_#1
		IF StringCompare(GUICtrlRead($hwmd_imp),$passwd_tx,1) == 0 Then ;IF_BLOCK_#2
			GUISetState(@SW_SHOW,$P1Win)
			GUISetState(@SW_HIDE,$P2Win)
			return
		Else
			Exit ;Выходим если пароли не совпадают.
		EndIf ;End_IF_BLOCK_#2
	else
		Exit ;Выходим если строка пуста.
	EndIf ;End_IF_BLOCK_#1
EndFunc

Func _main()
	;----------------------------------------------------------------
	$P1Win = GUICreate("Window #1", 306, 137, 251, 238)				;Главное окно.
	$P1BExit = GUICtrlCreateButton("Exit", 16, 80, 267, 25, 0)
	$P1BMsg1 = GUICtrlCreateButton("Hello", 16, 24, 267, 25, 0)
	;----------------------------------------------------------------
	$P2Win = GUICreate("Form Password", 352, 76, 193, 125) 			;Окно ввода пароля.
	$P2ImpPas = GUICtrlCreateInput("", 88, 24, 153, 21)
	$Pass_tx1 = GUICtrlCreateLabel("Password", 8, 24, 67, 23)
	GUICtrlSetFont(-1, 12, 400, 0, "Corbel")
	$P2Bchk = GUICtrlCreateButton("GO", 256, 24, 75, 25, 0)
	GUISetState(@SW_SHOW,$P2Win)

While 1
	$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE ;Выходим
				Exit
			Case $P1BExit 	;Выходим
				Exit
			Case $P2Bchk
				Call("ChPws", $P2ImpPas)
			Case $P1BMsg1
				MsgBox(0, "Hello", "Hello World")
		EndSwitch
	WEnd
EndFunc

Немножко опоздал, но предложу свой вариант :IL_AutoIt_1:
 
Верх