• Offizieller Beitrag

    Hallo,

    ich habe das Programm mal an die Version 3.2.11.1 angepasst!

    Tan-Verwaltung
    [autoit]


    #include <file.au3>
    #include <array.au3>
    #include <String.au3>
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <EditConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #Include <GuiListBox.au3>

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

    Opt("GUIOnEventMode", 1)

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

    ;~ Global Const $WM_COMMAND = 0x0111
    ;~ Global Const $WM_NOTIFY = 0x004E
    ;~ Global Const $NM_FIRST = 0
    ;~ Global Const $NM_LAST = (-99)
    ;~ Global Const $NM_CLICK = ($NM_FIRST - 2)
    ;~ Global Const $NM_DBLCLK = ($NM_FIRST - 3)
    ;~ Global Const $NM_RCLICK = ($NM_FIRST - 5)
    ;~ Global Const $NM_RDBLCLK = ($NM_FIRST - 6)

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

    Dim $listPath = 'trans_list.txt', $arTAN, $arErfass[1]
    Dim $neu = 0, $Salmon = 0xFA8072, $PaleGreen = 0x98FB98

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

    ; TAN-Erfassung GUI
    $TanErfass = GUICreate("TAN - Liste erfassen", 257, 424, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "TanErfassClose")
    $Label1 = GUICtrlCreateLabel("TAN - Listen - Nr.:", 16, 16, 89, 17)
    $inListNr = GUICtrlCreateInput("", 109, 13, 121, 21, BitOR($ES_RIGHT, $ES_AUTOHSCROLL))
    $Group1 = GUICtrlCreateGroup(" TAN ", 16, 44, 217, 329)
    $lstTAN = GUICtrlCreateList('0', 25, 59, 200, 305, BitOR($WS_VSCROLL, $WS_BORDER))
    $mnu = GUICtrlCreateContextMenu($lstTAN)
    $itemChange = GUICtrlCreateMenuItem('Ändern', $mnu)
    GUICtrlSetOnEvent(-1, 'changeTAN')
    $itemDelete = GUICtrlCreateMenuItem('Löschen', $mnu)
    GUICtrlSetOnEvent(-1, 'deleteTAN')
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $bSave = GUICtrlCreateButton("Verschlüsseln && Speichern", 16, 390, 217, 22, 0)
    GUICtrlSetOnEvent(-1, 'bSaveClick')
    ; /TAN-Erfassung GUI
    ; Main GUI
    $Form1 = GUICreate("TAN - Verwaltung", 667, 363, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "AForm1Close")
    $ListView1 = GUICtrlCreateListView("lfd. Nr.|TAN|Datum|Verwendungszweck", 16, 34, 636, 289, $LVS_NOSORTHEADER, _
    BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
    _GUICtrlListView_SetColumnWidth(-1, 0, 50)
    _GUICtrlListView_SetColumnWidth(-1, 1, 190)
    _GUICtrlListView_SetColumnWidth(-1, 2, 100)
    _GUICtrlListView_SetColumnWidth(-1, 3, 290)
    _GUICtrlListView_JustifyColumn(-1, 0, 1)
    _GUICtrlListView_JustifyColumn(-1, 1, 2)
    _GUICtrlListView_JustifyColumn(-1, 2, 2)
    _GUICtrlListView_JustifyColumn(-1, 3, 0)
    $Label1 = GUICtrlCreateLabel("TAN - Listen - Nr.:", 220, 9, 89, 17)
    $ListenNr = GUICtrlCreateInput("", 316, 6, 129, 21, BitOR($ES_RIGHT, $ES_AUTOHSCROLL, $ES_READONLY))
    $Label2 = GUICtrlCreateLabel("Anzahl freier TAN:", 16, 9, 90, 17)
    $freeTAN = GUICtrlCreateInput("", 110, 6, 33, 21, BitOR($ES_RIGHT, $ES_AUTOHSCROLL, $ES_READONLY))
    $bTANneu = GUICtrlCreateButton('TAN - Liste erfassen', 502, 6, 150, 21)
    GUICtrlSetOnEvent(-1, "bTANneuClick")
    $Label3 = GUICtrlCreateLabel("TAN auswählen mit Doppelklick - Dechiffrierung und Übergabe an Zwischenablage nach Paßwort-Abfrage", 16, 336, 636, 17, $SS_CENTER)
    ; /Main GUI

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

    If _FileReadToArray($listPath, $arTAN) = 0 Then
    If MsgBox(262180, 'FEHLER!', 'TAN - Liste konnte nicht geladen werden.' & @LF & 'Datei: ' & $listPath & ' nicht gefunden.' & @LF & _
    'Wenn die TAN - Liste bereits angelegt wurde,' & @LF & _
    'muß die Datei sich im selben Verzeichnis,' & @LF & _
    'wie dieses Programm befinden.' & @LF & @LF & _
    'Wollen Sie jetzt eine TAN - Liste erfassen?') = 6 Then
    bTANneuClick()
    $neu = 1
    Else
    Exit
    EndIf
    EndIf

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

    If $neu = 0 Then
    _ArrayDelete($arTAN, 0)
    GUISetState(@SW_SHOW, $Form1)
    _writeListView()
    EndIf
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
    GUIRegisterMsg($WM_NOTIFY, "WM_Notify_Events")

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

    While 1
    Sleep(100)
    WEnd

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

    Func AForm1Close()
    Exit
    EndFunc ;==>AForm1Close

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

    Func TanErfassClose()
    If (Not FileExists($listPath)) Then
    MsgBox(0, 'FEHLER!', 'Es wurde noch keine TAN-Liste angelegt!' & @LF & 'Das Programm wird beendet.')
    Exit
    EndIf
    GUISetState(@SW_SHOW, $Form1)
    GUISetState(@SW_HIDE, $TanErfass)
    EndFunc ;==>TanErfassClose

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

    Func ListViewDoubleClick()
    $idx = _GUICtrlListView_GetSelectedIndices($ListView1)

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

    If String(_GUICtrlListView_GetItemText($ListView1, int($idx), 2)) <> '0' Then
    MsgBox(0, 'ACHTUNG!', 'Diese TAN wurde bereits verwendet.')
    Return
    EndIf
    If MsgBox(262180, 'TAN abrufen', 'Wollen Sie die TAN mit der' & @LF & 'lfd. Nr.: ' & $idx + 1 & @LF & 'jetzt verwenden ?') = 7 Then Return
    Local $arReplace[4] = [3, _GUICtrlListView_GetItemText($ListView1, int($idx), 1), @MDAY & '.' & @MON & '.' & @YEAR, _
    InputBox('Verwendungszweck', 'Bitte geben Sie den Verwendungszweck ein')]
    $arTAN[$idx + 2] = $arReplace
    _writeFromArrayTAN()
    ClipPut(_StringEncrypt(0, _GUICtrlListView_GetItemText($ListView1, int($idx), 1), _
    InputBox('Paßwort Entschlüsselung', 'Bitte jetzt das Paßwort zur Entschlüsselung eingeben.', '', '•')))
    MsgBox(0, 'Zwischenablage', 'Die TAN wurde in die Zwischenablage eingefügt.')
    _GUICtrlListView_DeleteAllItems($ListView1)
    _FileReadToArray($listPath, $arTAN)
    _ArrayDelete($arTAN, 0)
    _writeListView()
    EndFunc ;==>ListViewDoubleClick

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

    Func _writeFromArrayTAN()
    Local $arTmp[UBound($arTAN)]
    $arTmp[0] = $arTAN[0]
    $arTmp[1] = $arTAN[1]
    For $i = 2 To UBound($arTAN) - 1
    $arTmp[$i] = _SubArrayGetEntry($arTAN, 1, $i) & ';' & _
    _SubArrayGetEntry($arTAN, 2, $i) & ';' & _
    _SubArrayGetEntry($arTAN, 3, $i)
    Next
    If FileExists($listPath) Then FileMove($listPath, $listPath & '.BAK')
    _FileWriteFromArray($listPath, $arTmp)
    EndFunc ;==>_writeFromArrayTAN

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

    Func bTANneuClick()
    If FileExists($listPath) Then MsgBox(0, 'HINWEIS', 'Nach dem Erfassen einer neuen TAN - Liste' & @LF & _
    'kann auf die bisherige Liste nicht mehr zugegriffen werden.' & @LF & _
    'Sie wird unter dem Namen: ' & $listPath & '.BAK im Programmverzeichnis abgelegt.')
    GUISetState(@SW_HIDE, $Form1)
    GUISetState(@SW_SHOW, $TanErfass)
    SplashTextOn('TAN - Nummern eingeben', @LF & ' Um die Erfassung der TAN - Nummern zu aktivieren,' & @LF & _
    ' bitte einen Doppelklick in die Liste ausführen' & @LF & _
    ' Um das Eingabefenster zu schließen, bei leerem Eingabefeld OK klicken.' & @LF & _
    ' Per Rechtsklick auf einen markierten Eintrag kann dieser:' & @LF & _
    ' - geändert oder' & @LF & _
    ' - gelöscht werden.', 550, 150, -1, -1, 4)
    Sleep(12000)
    SplashOff()
    EndFunc ;==>bTANneuClick

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

    Func _writeListView()
    Local $free = 0, $arLV[UBound($arTAN) - 2]
    GUICtrlSetData($ListenNr, $arTAN[0])
    For $i = 2 To UBound($arTAN) - 1
    $arTAN[$i] = StringSplit($arTAN[$i], ';')
    $arLV[$i - 2] = GUICtrlCreateListViewItem($i - 1 & '|' & _SubArrayGetEntry($arTAN, 1, $i) _
    & '|' & _SubArrayGetEntry($arTAN, 2, $i) _
    & '|' & _SubArrayGetEntry($arTAN, 3, $i), $ListView1)
    If _SubArrayGetEntry($arTAN, 2, $i) = 0 Then
    $free += 1
    GUICtrlSetBkColor($arLV[$i - 2], $PaleGreen)
    Else
    GUICtrlSetBkColor($arLV[$i - 2], $Salmon)
    EndIf
    Next
    GUICtrlSetData($freeTAN, $free)
    EndFunc ;==>_writeListView

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

    Func List_DoubleClick()
    $TAN = InputBox('TAN - Erfassung', 'Bitte hier die TAN eingeben')
    If $TAN <> '' Then
    _GUICtrlListBox_AddString($lstTAN, $TAN)
    _GUICtrlListBox_ReplaceString($lstTAN, 0, String(_GUICtrlListBox_GetCount($lstTAN) - 1))
    Else
    Return
    EndIf
    List_DoubleClick()
    EndFunc ;==>List_DoubleClick

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

    Func changeTAN()
    $idx = _GUICtrlListBox_GetCaretIndex($lstTAN)
    $new = InputBox('TAN - Erfassung', 'Bitte korrigieren', _GUICtrlListBox_GetText($lstTAN, $idx))
    If $new <> '' Then _GUICtrlListBox_ReplaceString($lstTAN, $idx, String($new))
    EndFunc ;==>changeTAN

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

    Func deleteTAN()
    $idx = _GUICtrlListBox_GetCaretIndex($lstTAN)
    If MsgBox(262180, 'Löschen', 'Soll:' & @LF & _GUICtrlListBox_GetText($lstTAN, $idx) & @LF & 'wirklich gelöscht werden?') = 6 Then
    _GUICtrlListBox_DeleteString($lstTAN, $idx)
    _GUICtrlListBox_ReplaceString($lstTAN, 0, String(_GUICtrlListBox_GetCount($lstTAN) - 1))
    EndIf
    EndFunc ;==>deleteTAN

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

    Func bSaveClick()
    $listNr = GUICtrlRead($inListNr)
    If $listNr = '' Then
    MsgBox(0, '', 'Listen-Nr. wurde nicht erfaßt!')
    Return
    EndIf
    $anz = _GUICtrlListBox_GetCount($lstTAN)
    If $anz < 2 Then
    MsgBox(0, '', 'Keine TAN-Nr. erfaßt!')
    Return
    EndIf
    ReDim $arErfass[$anz + 1]
    $arErfass[0] = $listNr
    $arErfass[1] = $anz
    $KEY = InputBox('Paßwort Verschlüsselung', 'Bitte jetzt das Paßwort zur Verschlüsselung eingeben.', '', '•')
    For $i = 1 To $anz - 1
    $arErfass[$i + 1] = _StringEncrypt(1, _GUICtrlListBox_GetText($lstTAN, $i), $KEY) & ';0;'
    Next
    If FileExists($listPath) Then FileMove($listPath, $listPath & '.BAK', 1)
    _FileWriteFromArray($listPath, $arErfass)
    _GUICtrlListView_DeleteAllItems($ListView1)
    _FileReadToArray($listPath, $arTAN)
    _ArrayDelete($arTAN, 0)
    TanErfassClose()
    _writeListView()
    EndFunc ;==>bSaveClick

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

    Func _SubArrayGetEntry($ARRAY, $SubIdx, $iDim1, $iDim2 = -1)
    If (Not IsArray($ARRAY)) Then
    SetError(1)
    Return 0
    EndIf
    If ($iDim1 < 0) Or ($iDim1 > UBound($ARRAY) - 1) Then
    SetError(2)
    Return 0
    EndIf
    Local $UbSecond = UBound($ARRAY, 2)
    If @error Then
    If $iDim2 <> -1 Then
    SetError(3)
    Return 0
    EndIf
    ElseIf ($iDim2 < -1) Or ($iDim2 > $UbSecond - 1) Then
    SetError(2)
    Return 0
    EndIf
    Local $sub
    Switch $iDim2
    Case - 1
    $arSub = $ARRAY[$iDim1]
    Case Else
    $arSub = $ARRAY[$iDim1][$iDim2]
    EndSwitch
    If ($SubIdx < 0) Or ($SubIdx > UBound($arSub) - 1) Then
    SetError(4)
    Return 0
    Else
    Return $arSub[$SubIdx]
    EndIf
    EndFunc ;==>_SubArrayGetEntry

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

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $nID = BitAND($wParam, 0xFFFF)
    Local $hCtrl = $lParam
    Local Const $LBN_ERRSPACE = (-2);
    Local Const $LBN_SELCHANGE = 1;
    Local Const $LBN_DBLCLK = 2;
    Local Const $LBN_SELCANCEL = 3;
    Local Const $LBN_SETFOCUS = 4;
    Local Const $LBN_KILLFOCUS = 5;

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

    Switch $nID
    Case $lstTAN
    Switch $nNotifyCode
    Case $LBN_ERRSPACE
    ;~ _DebugPrint("$LBN_ERRSPACE")
    Case $LBN_SELCHANGE
    ;~ _DebugPrint("$LBN_SELCHANGE")
    Case $LBN_SELCANCEL
    ;~ _DebugPrint("$LBN_SELCANCEL")
    Case $LBN_SETFOCUS
    ;~ _DebugPrint("$LBN_SETFOCUS")
    Case $LBN_KILLFOCUS
    ;~ _DebugPrint("$LBN_KILLFOCUS")
    Case $LBN_DBLCLK
    List_DoubleClick()
    EndSwitch
    EndSwitch
    ; Proceed the default Autoit3 internal message commands.
    ; You also can complete let the line out.
    ; !!! But only 'Return' (without any value) will not proceed
    ; the default Autoit3-message in the future !!!
    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_COMMAND

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

    Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam)
    ;#forceref $hWndGUI, $MsgID, $wParam
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int", $lParam);NMHDR (hwndFrom, idFrom, code)
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3)
    Select
    Case $wParam = $ListView1
    Select
    Case $event = $NM_CLICK
    ;~ ListView_Click ()
    Case $event = $NM_DBLCLK
    ListViewDoubleClick()
    Case $event = $NM_RCLICK
    ;~ ListView_RightClick ()
    Case $event = $NM_RDBLCLK
    ;~ ListView_RightDblClick ()
    EndSelect
    EndSelect
    $tagNMHDR = 0
    $event = 0
    $lParam = 0
    EndFunc ;==>WM_Notify_Events

    [/autoit]