- Offizieller Beitrag
Hallo,
ich habe das Programm mal an die Version 3.2.11.1 angepasst!
Tan-Verwaltung
#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>
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)
Dim $listPath = 'trans_list.txt', $arTAN, $arErfass[1]
Dim $neu = 0, $Salmon = 0xFA8072, $PaleGreen = 0x98FB98
; 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
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
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")
While 1
Sleep(100)
WEnd
Func AForm1Close()
Exit
EndFunc ;==>AForm1Close
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
Func ListViewDoubleClick()
$idx = _GUICtrlListView_GetSelectedIndices($ListView1)
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
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
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
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
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
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
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
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
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
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;
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
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