Inputfeldeingaben in Variable speichern

  • Hey,

    ich habe ein Anliegen, und zwar geht es darum:

    ich habe eine Passworteingabe Programmiert wo man zuerst ein Passwort setzen soll und diese Eingabe soll dann als Passwort dienen. An sich mit einem Button mit nur einer Funktion kein Problem, aber ich habe einen Button mit mehreren Funktionen via Case 1 Case 2 ... erstellt, pro click wird die zuvor gespeicherte Variable gelöscht und muss vom durch klick des Buttons neu eingelesen werden was aber nicht sinn und zweck der Sache ist, denn so wird das Passwort immer neu gesetzt, das heist es gibt keine falschen Eingaben. So will ich das natürlich nicht! Gibt es nicht eine Möglichkeit die Inputeingabe einmal in einer Variable Speichern, ohne dass sie gelöscht wird?

  • Hi,
    das ist soweit auch richtig. Nun kommt es auf Deine jeweilige Funktion an, also die Eingaben EINLESEN, SCHREIBEN oder VERGLEICHEN.

    Spoiler anzeigen
    [autoit]


    #AutoIt3Wrapper_AU3Check_Parameters=-w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    ;~ #include <GUIConstants.au3> ;i -3 = $GUI_EVENT_CLOSE

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $etfunc[4] = ["Function 1", "Function 2", "Function 3", "Enter Pass"]

    [/autoit] [autoit][/autoit] [autoit]

    $hWnd = GUICreate("Example", 200, 50)
    GUISetOnEvent(-3, "_Exit") ;i -3 = $GUI_EVENT_CLOSE
    $cButton = GUICtrlCreateButton("Enter Pass", 60, 12, 80, 25)
    GUICtrlSetOnEvent($cButton, "_Button")

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While Sleep(1000)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Button()
    Local Static $iMode = 0
    If $iMode > 3 Then $iMode = 0
    Switch $iMode
    Case 0
    $sPass = InputBox("Password", "Pass:", "Pass")
    If $sPass <> "Pass" Then Return
    ;~ Hier Deine Function 1
    Case 1
    ;~ Hier Deine Function 2
    Case 2
    ;~ Hier Deine Function 3
    Case 3
    ;~ Hier Deine Function Enter Pass
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(64, "Mode: " & $iMode + 1, "Switching to next mode.")
    GUICtrlSetData($cButton, $etfunc[$iMode])

    [/autoit] [autoit][/autoit] [autoit]

    $iMode += 1
    EndFunc ;==>_Button

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    Exit
    EndFunc ;==>_Exit
    ; Ende

    [/autoit]


    IniRead-IniWrite - Tut ;)

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    ;~ $GUI_EVENT_CLOSE —> GUIConstantsEx.au3

    Dim $ini = @ScriptDir & "\config.ini"
    Dim $name = IniRead($ini, "Benutzerdaten", "Name", "Kein Fund")

    GUICreate("IniRead-IniWrite - Tut", 250, 150)
    GUICtrlCreateLabel("Name", 10, 12, 28, 17)
    $iptInput = GUICtrlCreateInput("", 48, 10, 107, 20)
    GUICtrlSetData(-1, $name)
    $btnSave = GUICtrlCreateButton("Speichern", 165, 10, 75, 22)
    $lblOut = GUICtrlCreateLabel("", 52, 45, 107, 17)
    $btnOut = GUICtrlCreateButton("Ausgabe", 165, 45, 75, 22)
    $btnSec = GUICtrlCreateButton("Sektion", 165, 77, 75, 22)
    $btnClose = GUICtrlCreateButton("Beenden", 165, 118, 75, 22)

    GUISetState(@SW_SHOW)

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE, $btnClose
    FileDelete($ini) ;i ini löschen
    ExitLoop
    Case $btnSave
    IniWrite($ini, "Benutzerdaten", "Name", GUICtrlRead($iptInput))
    IniWrite($ini, "Benutzerdaten", "Nachname", "RR04")
    Case $btnOut
    $name = IniRead($ini, "Benutzerdaten", "Name", "Kein Fund")
    GUICtrlSetData($lblOut, $name)
    Case $btnSec
    $nameSec = IniReadSection($ini, "Benutzerdaten")
    If @error Then
    MsgBox(4096, "", "Ein Fehler ist aufgetreten, wahrscheinlich keine INI-Datei.")
    Else
    For $i = 1 To $nameSec[0][0]
    MsgBox(64, "IniReadSection", "Der Inhalt der Sektion." _
    & @CRLF & "Anzahl der Einträge: " & $nameSec[0][0] & @CRLF _
    & "Key: " & $nameSec[$i][0] & " Value: " & $nameSec[$i][1])
    Next
    EndIf
    EndSwitch
    WEnd
    ; Ende

    [/autoit]
  • IniWrite löst mein Problem schon recht gut. Danke an euch...

    aber mein Script sieht ungefähr so aus:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Button()
    Switch $iButtonModus
    Case 1
    $1 = GUICtrlRead($Input1)
    $2 = GUICtrlRead($Input2)
    If $1 == $2 Then
    $iButtonModus = 2
    GUICtrlSetData($Button1, "OFF")
    GUICtrlSetState($Input2, $GUI_DISABLE)
    GUICtrlSetData($Input2, "")
    Else
    MsgBox(0,"Fail","PWS stimmen net überein!")
    $iButtonModus = 1
    EndIf
    Case 2
    If $1 == $2 Then ; Das Funktioniert nicht Obwohl doch schon mit genau diesem Button das Passwort eingelesen wurde, wie kann ich das machen dass ich es nicht neu setzen muss?
    GUICtrlSetData($Button1, "ON")
    GUICtrlSetState($Input2, $GUI_ENABLE)
    GUICtrlSetData($Input1, "")
    $iButtonModus = 1
    Else
    MsgBox(0,"Falsch","Passwörter sind Falsch!")
    $iButtonModus = 2
    EndIf
    EndSwitch
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Vielleicht gibts da ja eine Möglichkeit, wäre super...

  • also ich hab da mal auch was mit ner Verschlüsselung gebastelt wenn dir das hilft (ich meine in der INI stehen ja jetzt die Passwörter).
    Einmal die User Generate au3 wo man User anlegen kann

    [autoit]


    #include <Crypt.au3>
    $benutzer = InputBox("Benutzer Generator","Bitte den gewünschten Benutzernamen eingeben:")
    If @error Then
    Exit
    EndIf
    $pw = InputBox("PW Generator","Bitte das Passwort eingeben:")
    If @error Then
    Exit
    EndIf
    $pwmd5 =_Crypt_HashData($pw,$CALG_MD5)
    $benutzermd5 = _Crypt_HashData($benutzer,$CALG_MD5)
    FileWrite(@ScriptDir&"\data",$benutzermd5&"="&$pwmd5)
    If @error Then
    MsgBox(16,"Fehler","Benutzer konnte nicht erstellt werden, bitte Vorgang wiederholen")
    Exit
    EndIf
    MsgBox(0,"Info","Benutzer wurde erfolgreich erstellt.")
    Exit

    [/autoit]


    und einmal das eigentlich Programm wo man mit dem Passwort zugreifen muss natürlich kann man auch beide Scripte in ein Script packen.

    [autoit]


    ;Anmelde Maske
    #include <Crypt.au3>
    $data = FileReadLine(@ScriptDir&"\data",1)
    ;~ ;MsgBox(0,"",$pwbe[1]&" "&$pwbe[2]);~
    If @error Then
    MsgBox(16,"Fehler","Bitte zuerst die User Generate.exe ausführen")
    Exit
    EndIf
    $pwbe = StringSplit($data,"=")
    $benutzer = InputBox("Benutzer","Benutzernamen eingeben:")
    $benutzermd5=_Crypt_HashData($benutzer,$CALG_MD5)
    If $benutzermd5 = $pwbe[1] Then
    $pw = InputBox("Passwort","Bitte das Passwort eingeben:","","*")
    $pwmd5=_Crypt_HashData($pw,$CALG_MD5)
    If $pwmd5 = $pwbe[2] Then
    MsgBox(0,"Geschafft","Das Programm kann gestartet werden")
    ;FileDelete(@ScriptDir&"\data")
    Else
    MsgBox(16,"Fehler","Falsches Passwort eingegeben")
    EndIf
    Else
    MsgBox(16,"Fehler","Benutzernamen nicht bekannt")
    Exit
    EndIf

    [/autoit]

    :thumbup:

  • kein schlechtes Script kann ich bestimmt später mal gebrauchen, aber wäre Super wenn ich ein Passwort setzen könnte, und das nur in einer variable gespeichert wird, da ich das Proramm nicht beenden möchte wenn ich das Passwort gesetzt habe