• Moin,

    Ich möchte euch hier eine noch unausgereifte Alternative zum in Windows enthaltenen Notepad zeigen.
    Es kann eigentlich noch nicht wirklich viel^^

    Im Prinzip wollte ich nur eine Möglichkeit schaffen normale Textdateien leicht verschlüsselt abspeichern zu können, ohne dafür extra ein Programm starten zu müssen, welches paralell zu Notepad laufen muss. Daher die Idee ein neues Notepad zu basteln, welches mit beliebigen Funktionen erweiterbar ist. (Gibts 100%ig schon in AutoIt^^ Dann ist das hier eben eine weitere Variante...)

    Das Verschlüsseln erfolgt über einen 4-Stelligen Code (mit je einem aus 9 Zeichen --> 9^4 = 6561 Möglichkeiten), der über Buttons eingegeben werden muss. (Das sollte mit einem Touchpad gut machbar sein. Deshalb keine Texteingabe).

    Anschließend wird die standard _StringEncrypt Funktion genutzt.

    AutoIt-Code
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=NotepadIcon_48.ico
    #AutoIt3Wrapper_UseUpx=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    #include <GuiRichEdit.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <String.au3>

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

    Opt('GUICloseOnESC', 0)
    Opt('MustDeclareVars', 1)

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

    Global $Pfad = ''
    Global $Error = False
    Global $FalschesPW = 0
    Global $DateiTyp = 'txt'
    Global $PW_Indikator = 'MITPW'

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

    If $CMDLINE[0] Then $Pfad = $CMDLINE[1]

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

    _Anzeige()

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

    Func _Anzeige($String = '')

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

    Local $hGUI, $hMenu, $hMenu_Exit, $hMenu_Neu, $hMenu_Oeffnen, $hMenu_Speichern, $hMenu_SpeichernPW, $hMenu_SpeichernPW_Unter, $hMenu_Speichern_Unter, $B = @DesktopWidth/2, $H = @DesktopHeight/2, $hEdit

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

    $hGUI = GUICreate(_Name($Pfad) & ' - Editor', $B, $H, @DesktopWidth / 2 - $B/2, @DesktopHeight / 2 - $H/2, $WS_SIZEBOX+$WS_MAXIMIZEBOX + $WS_MINIMIZEBOX)

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

    $hMenu = GUICtrlCreateMenu('Datei')
    $hMenu_Neu = GUICtrlCreateMenuItem('Neu...', $hMenu)
    $hMenu_Oeffnen = GUICtrlCreateMenuItem('Öffnen...', $hMenu)
    $hMenu_Speichern = GUICtrlCreateMenuItem('Speichern...', $hMenu)
    $hMenu_SpeichernPW = GUICtrlCreateMenuItem('Speichern... (verschlüsselt)', $hMenu)
    $hMenu_Speichern_Unter = GUICtrlCreateMenuItem('Speichern unter...', $hMenu)
    $hMenu_SpeichernPW_Unter = GUICtrlCreateMenuItem('Speichern unter... (verschlüsselt)', $hMenu)
    $hMenu_Exit = GUICtrlCreateMenuItem('Beenden', $hMenu)

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

    If $Pfad Then $String = _Oeffnen($Pfad)

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

    $hEdit = _GUICtrlRichEdit_Create($hGUI, '', 0, 0, $B - 2, $H - 45, $WS_VSCROLL + $ES_AUTOVSCROLL + $ES_MULTILINE)
    _GUICtrlRichEdit_SetUndoLimit($hEdit, 200)

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

    _GUICtrlRichEdit_SetCharAttributes($hEdit, '+bo')
    _GUICtrlRichEdit_SetFont($hEdit, 12, 'Courier New')
    _GUICtrlRichEdit_InsertText($hEdit, $String)

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

    GUISetState(@SW_SHOW, $hGUI)

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

    While 1
    Switch GUIGetMsg()
    Case -3
    ExitLoop
    Case $hMenu_Oeffnen
    $String = _Oeffnen()
    If $String Then
    WinSetTitle($hGUI, '', _Name($Pfad) & ' - Editor')
    _GUICtrlRichEdit_SetText($hEdit, '')
    _GUICtrlRichEdit_SetCharAttributes($hEdit, '+bo')
    _GUICtrlRichEdit_SetFont($hEdit, 12, 'Courier New')
    _GUICtrlRichEdit_InsertText($hEdit, $String)
    EndIf
    Case $hMenu_Speichern
    $String = _GUICtrlRichEdit_GetText($hEdit)
    If $String Then
    _Speichern($String)
    WinSetTitle($hGUI, '', _Name($Pfad) & ' - Editor')
    EndIf
    Case $hMenu_SpeichernPW
    $String = _GUICtrlRichEdit_GetText($hEdit)
    If $String Then
    _Speichern($String, True)
    WinSetTitle($hGUI, '', _Name($Pfad) & ' - Editor')
    EndIf
    Case $hMenu_Speichern_Unter
    $String = _GUICtrlRichEdit_GetText($hEdit)
    If $String Then
    $Pfad = ''
    _Speichern($String)
    WinSetTitle($hGUI, '', _Name($Pfad) & ' - Editor')
    EndIf
    Case $hMenu_SpeichernPW_Unter
    $String = _GUICtrlRichEdit_GetText($hEdit)
    If $String Then
    $Pfad = ''
    _Speichern($String, True)
    WinSetTitle($hGUI, '', _Name($Pfad) & ' - Editor')
    EndIf
    Case $hMenu_Neu
    $String = ''
    $Pfad = ''
    WinSetTitle($hGUI, '', _Name($Pfad) & ' - Editor')
    _GUICtrlRichEdit_SetText($hEdit, '')
    _GUICtrlRichEdit_SetCharAttributes($hEdit, '+bo')
    _GUICtrlRichEdit_SetFont($hEdit, 12, 'Courier New')
    Case $hMenu_Exit
    ExitLoop
    EndSwitch
    WEnd

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

    _GUICtrlRichEdit_Destroy($hEdit)
    Exit

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

    EndFunc ;==>_Anzeige

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

    Func _Name($P)
    If $P = '' Then Return 'Unbenannt'
    Local $Split = StringSplit($P, '\')
    Return $Split[$Split[0]]
    EndFunc ;==>_Name

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

    Func _PWInput()
    Local $sRet = '', $iMsg, $hGUI, $aBtn[9]
    $hGUI = GUICreate('Passwort', 198, 198, @DesktopWidth / 2 - 99, @DesktopHeight / 2 - 99)
    GUISetBkColor(0x000000, $hGUI)
    For $i = 0 To 8 Step 1
    $aBtn[$i] = GUICtrlCreateButton('X', $i * 66 - Int($i / 3) * 198, Int($i / 3) * 66, 66, 66)
    Next
    GUISetState(@SW_SHOW, $hGUI)
    While 1
    $iMsg = GUIGetMsg()
    If ($iMsg = -3) Or StringLen($sRet) = 4 Then ExitLoop
    For $i = 0 To 8 Step 1
    If $iMsg = $aBtn[$i] Then $sRet &= String($i + 1)
    Next
    WEnd
    If $iMsg = -3 Then $sRet = 'Beendet'
    GUIDelete($hGUI)
    Return $sRet
    EndFunc ;==>_PWInput

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

    Func _ZielWahl()
    Local $P = FileSaveDialog('Datei suchen...', @ScriptDir, '(*.' & $DateiTyp & ')', 1)
    If Not (StringRight($P, StringLen($DateiTyp)) = $DateiTyp) Then $P &= '.' & $DateiTyp
    Return $P
    EndFunc ;==>_ZielWahl

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

    Func _DateiWahl()
    Return FileOpenDialog('Datei suchen...', @ScriptDir, '(*.' & $DateiTyp & ')', 1)
    EndFunc ;==>_DateiWahl

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

    Func _Crypt($String, $PW)
    Return _StringEncrypt(1, $String, $PW)
    EndFunc ;==>_Crypt

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

    Func _Decrypt($String, $PW)
    $String = _StringEncrypt(0, $String, $PW)
    If Not $String Then $Error = True
    Return $String
    EndFunc ;==>_Decrypt

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

    Func _Oeffnen($P = '')
    If Not $P Then $P = _DateiWahl()
    $Pfad = $P
    Local $Read = StringTrimLeft(StringToBinary(FileRead($P)), 2), $PW, $Decrypted
    If StringLeft($Read, StringLen($PW_Indikator) * 2) = StringTrimLeft(StringToBinary($PW_Indikator), 2) Then
    $Read = StringTrimLeft($Read, StringLen($PW_Indikator) * 2)
    $PW = _PWInput()
    If $PW = 'Beendet' Then Return ''
    $Decrypted = _Decrypt($Read, $PW)
    If $Error Then
    $FalschesPW += 1
    Else
    $FalschesPW = 0
    EndIf
    $Error = False
    If $FalschesPW Then
    _Oeffnen($P)
    EndIf
    Else
    $Decrypted = BinaryToString('0x' & $Read)
    EndIf
    Return $Decrypted
    EndFunc ;==>_Oeffnen

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

    Func _Speichern($S, $MitPW = False)
    Local $PW
    If Not $Pfad Then $Pfad = _ZielWahl()
    If Not $Pfad Then Return
    If $MitPW Then
    $PW = _PWInput()
    If Not $PW Then Return
    FileDelete($Pfad)
    FileWrite($Pfad, '')
    FileWrite($Pfad, $PW_Indikator & BinaryToString('0x' & _Crypt($S, $PW)))
    Else
    FileDelete($Pfad)
    FileWrite($Pfad, '')
    FileWrite($Pfad, $S)
    EndIf
    EndFunc ;==>_Speichern

    [/autoit]


    Vllt kanns ja jemand gebrauchen. Es sollen hier nicht die harten Passwortknacker abgeschüttelt werden, sondern nur gaaanz simpel diejenigen, die mit Computern eh nix anfangen können.

    Ein Problem gibt es noch mit dem verändern der Fenstergröße. Ich hab bersucht das RichEdit anzupassen, aber iwie war das nicht erfolgsgekrönt. Die Versuche sind hier allerdings nicht enthalten.

    lg
    M