| Eh si, son passati 10 anni dall'ultimo progetto che ho postato... E niente le cose non sono cambiate, in fondo ero povero e son rimasto povero, Avendo 30 mila account su piattaforme diverse mi sono sentito di avere necessità di un password manager, tutto questo per aumentare la sicurezza dei miei accounts. Niente le alternative che ci sono online sinceramente non mi aggradano molto, e sono anche abbastanza diffidente di piattaforme gratuite o che costano poco. Quindi ho detto perchè non crearne uno da zero con il mio amato Autoit? CODICE #NoTrayIcon #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=C:\Users\hackt\Downloads\password_2_.ico #AutoIt3Wrapper_Outfile=Password Manager v1 x86.Exe #AutoIt3Wrapper_Outfile_x64=Password Manager v1 x64.Exe #AutoIt3Wrapper_UseUpx=y #AutoIt3Wrapper_Compile_Both=y #AutoIt3Wrapper_UseX64=y #AutoIt3Wrapper_Res_Comment=Un semplice ma efficace Password Manager #AutoIt3Wrapper_Res_Fileversion=0.8 #AutoIt3Wrapper_Res_CompanyName=hacktooth #AutoIt3Wrapper_Res_LegalCopyright=hacktooth #AutoIt3Wrapper_Res_Language=1040 #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
;Password manager beta version ;26/12/2021 ;by hacktooth
#comments-start
Bug fix e implementazione di funzionalità ------------------------------------------------------------------------------------------------- Legenda implementazione di funzionalità +++ = Priorità massima ++ = Priorità media + = Priorità bassa (non è detto che venga aggiunta) ------------------------------------------------------------------------------------------------- Legenda Bug fix *** = Critico ( da attribuire solo per motivi di sicurezza dei dati ) ** = Grave * = Lieve ------------------------------------------------------------------------------------------------- IMPLEMENTAZIONE FUNZIONALITA' +++ Aggiungere la rimozione degli accounts +++ Aggiungere la modifica dei records su _readrec() ++ Aggiungere Importazione/Esportazione file settings.ini ++ Implementare la categorizzazione degli Accounts per tipo esempio (Email, Shopping, Socials, Games, etc ...) + Orientare il funzionamento del Software su soluzioni in Cloud + Far chiudere la finestra GUI_addrec() una volta aggiunto l'account + Nella finestra principale [GUI_main()] visualizzare i records degli Accounts solo dopo aver premuto INVIO e non più tramite Click DX del mouse ------------------------------------------------------------------------------------------------- BUG NOTI ** GUI_main() non risponde ai comandi solo dopo 3 click su GUI_CLOSE_EVENT Come generare il bug : Su GUI_main() cliccare su un record appare GUI_readrec(), cliccare successivamente il pulsante per visualizzare i record cifrati chiudere GUI_readrec() per ritornare su GUI_main() ------------------------------------------------------------------------------------------------- * Altezza di GUI_readrec() non è sempre proporzionale al numero totale di records su un Account Come generare il bug : Da GUI_main() selezionare un Account con records totali superiori a 3 * Su GUI_addField() non inserire records se il testo di Default nelle label non è stato cambiato
#comments-end
#include <File.au3> #include <FileConstants.au3> #include <APIFilesConstants.au3> #include <WinAPIFiles.au3> #include <Crypt.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3>
Global $userreg , $masterpassreg , $login , $username, $masterpass, $user, $masterkey, $nameuser, $Main, $login, $List1, $vListItem, $insrec, $Checkbox1, $Checkbox2, $recName, $recName1 Global $recValue, $recValue1, $sh, $hide, $ReadRecGUI Global Const $key = "QUI DOVRETE INSERIRE LA PASSWORD PER CIFRARE E DECIFRARE I RECORDS" Global Const $settingfile = "settings.ini" Global Const $name = "Password manager" Global Const $tempFolder = @TempDir & "\" Global Const $copyIco = @TempDir & "\copy.ico" Global Const $Height = 75, $top = 16 Global $left = 16
;_TEMPFILE(DIR[OPTIONAL PREFIX], EXSTENSION, LENG OF CHARACTER TO USE TO GENERATE A UNIQUE NAME)
Global Enum $NARRAY, $FIELD1, $FIELD2, $VALUE1, $VALUE2 Global $aRead[5]
DirCreate($sFilePath)
FileInstall("‪F:\Autoit\passwordmanager\icon\eye.ico",@TempDir&"\eye.ico", 1) FileInstall("‪F:\Autoit\passwordmanager\icon\copy.ico",@TempDir&"\copy.ico", 1)
_Crypt_Startup() ; To optimize performance start the crypt library, though the same results will be shown if it isn't.
_login()
Func _login()
Do ;Controllo se esiste un file Utente, altrimenti chiedo di effettuare la registrazione If Not FileExists($settingfile) Then $iMsgBoxAnswer = MsgBox(262196,$name,"I nostri cani altamente addrestrati hanno scoperto che nessun account stato registrato fino ad oggi!" & @CRLF & @CRLF & _ "Vuoi creare un nuovo account o vuoi importare un vecchio account esistente?") Select Case $iMsgBoxAnswer = 6 ;Yes _reg() ExitLoop Case $iMsgBoxAnswer = 7 ;No ExitLoop EndSelect Else ExitLoop EndIf Until False
$login = GUICreate("Login", 251, 301, -1, -1) GUISetFont(10, 400, 0, "Segoe UI") $Label1 = GUICtrlCreateLabel("User", 16, 24, 31, 21) $username = GUICtrlCreateInput("", 16, 48, 217, 25, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER)) GUICtrlSetFont(-1, 10, 400, 2, "Segoe UI") $Label2 = GUICtrlCreateLabel("Master Password", 16, 88, 105, 21) $masterpass = GUICtrlCreateInput("", 16, 112, 217, 25, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER, $ES_PASSWORD)) GUICtrlSetFont(-1, 10, 400, 2, "Segoe UI") $sign = GUICtrlCreateButton("Sign In", 16, 168, 217, 25) $reg = GUICtrlCreateLabel("New user? register an account now", 17, 208, 217, 21, $SS_CENTER) GUICtrlSetCursor (-1, 0) GUICtrlSetFont(-1, 10, 400, 4, "Segoe UI") GUICtrlSetColor(-1, 0x0066CC) GUISetState(@SW_SHOW,$login)
While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE _esci() Case $sign _checkreg(GUICtrlRead($username), GUICtrlRead($masterpass)) If @error = "2" Then MsgBox(262160,$name,"Username o MasterKey errati! Riprova") ElseIf @error = "1" Then MsgBox(16,"-.-","I nostri cani non addestrati ti stanno guardando migliorando la loro autostima," & _ " esseri viventi più stupidi di loro esistono! Ecco adesso riprova magari inserendo User o Password ASINO") Else $nameuser = GUICtrlRead($username) GUIDelete($login) ExitLoop EndIf Case $reg _reg() EndSwitch WEnd
_main()
EndFunc
Func _reg()
$reggui = GUICreate("Registration", 298, 277, -1, -1) GUISetFont(8, 400, 0, "Segoe UI") $userreg = GUICtrlCreateInput("Insert your username", 16, 24, 265, 25) GUICtrlSetFont(-1, 10, 400, 2, "Segoe UI") $masterpassreg = GUICtrlCreateInput("Insert master password", 16, 64, 265, 25) GUICtrlSetFont(-1, 10, 400, 2, "Segoe UI") $Label1 = GUICtrlCreateLabel("If you don't remember this password, you cannot access to your account, and yes you are a dumb donkey!", 18, 108, 266, 50, $SS_CENTER) GUICtrlSetFont(-1, 10, 400, 6, "Segoe UI") GUICtrlSetColor(-1, 0x0066CC) $Register = GUICtrlCreateButton("Register", 16, 174, 265, 25) GUICtrlSetFont(-1, 10, 400, 0, "Segoe UI") $Back = GUICtrlCreateButton("Back", 16, 210, 265, 25) GUICtrlSetFont(-1, 10, 400, 0, "Segoe UI") $importa = GUICtrlCreateButton("Importa", 208, 248, 73, 17) GUICtrlSetColor(-1, 0x0066CC)
GUISetState(@SW_SHOW,$reggui)
While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE, $Back GUIDelete($reggui) GUISwitch($login) ExitLoop Case $Register _writereg() If @error Then MsgBox(16,"-.-","I nostri cani non addestrati ti stanno guardando migliorando la loro autostima," & _ " esseri viventi più stupidi di loro esistono! Ecco adesso riprova magari inserendo User o Password ASINO") Else MsgBox(64,$name,"Registration Complete!") GUIDelete($reggui) GUISwitch($login) ExitLoop EndIf Case $importa MsgBox("","Coming soon","Coming soon") EndSwitch WEnd
EndFunc
Func _main()
$Main = GUICreate("Benvenuto " & $user, 426, 413, 200, 149) $Menu = GUICtrlCreateMenu("&Menù") $new = GUICtrlCreateMenuItem("New"&@TAB&"Shift+Ctrl+F17", $Menu) $settings = GUICtrlCreateMenuItem("Settings"&@TAB&"Ctrl+Space", $Menu) $about = GUICtrlCreateMenuItem("About", $Menu) $List1 = GUICtrlCreateList("", 0, 0, 425, 329) GUICtrlSetData(-1, "") GUICtrlSetFont(-1, 10, 400, 0, "Segoe UI") $addRec = GUICtrlCreateButton("Aggiungi Accounts", 224, 344, 177, 33) GUICtrlSetFont(-1, 10, 400, 0, "Segoe UI") $removeRec = GUICtrlCreateButton("Rimuovi (coming soon)", 16, 344, 177, 33) GUICtrlSetFont(-1, 10, 400, 0, "Segoe UI") #cs Dim $Main_AccelTable[2][2] = [["^+{F17}", $new],["^{SPACE}", $settings]] GUISetAccelerators($Main_AccelTable) #ce
_updategui()
GUISetState(@SW_SHOW,$Main)
While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE _esci() Case $new, $addRec _insrec() _updategui() Case $settings Case $about _about() Case $removeRec Case $List1 _readrec() EndSwitch WEnd
EndFunc
Func _insrec() ;Inserisce un Account
$insrec = GUICreate("Aggiungi Account", 514, 331, 306, 209) GUISetFont(10, 400, 0, "Segoe UI") $Group1 = GUICtrlCreateGroup("New Account", 16, 8, 481, 305) $Label10 = GUICtrlCreateLabel("Account name :", 48, 48, 110, 25) GUICtrlSetFont(-1, 12, 400, 0, "Segoe UI") GUICtrlSetColor(-1, 0x0066CC) $sAccount = GUICtrlCreateInput("", 160, 48, 305, 25) $Label11 = GUICtrlCreateLabel("Email :", 109, 96, 50, 25) GUICtrlSetFont(-1, 12, 400, 0, "Segoe UI") GUICtrlSetColor(-1, 0x0066CC) $sEmail = GUICtrlCreateInput("", 160, 96, 305, 25) $Label12 = GUICtrlCreateLabel("Username :", 76, 144, 82, 25) GUICtrlSetFont(-1, 12, 400, 0, "Segoe UI") GUICtrlSetColor(-1, 0x0066CC) $sUser = GUICtrlCreateInput("(facoltativo)", 160, 144, 305, 25) $Label13 = GUICtrlCreateLabel("Password :", 81, 192, 78, 25) GUICtrlSetFont(-1, 12, 400, 0, "Segoe UI") GUICtrlSetColor(-1, 0x0066CC) $sPass = GUICtrlCreateInput("", 160, 192, 305, 25, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD)) $annulla = GUICtrlCreateButton("Cancel", 336, 264, 129, 33) $addrecs = GUICtrlCreateButton("Aggiungi Account", 192, 264, 129, 33) GUICtrlCreateGroup("", -99, -99, 1, 1) $tip = GUICtrlCreateLabel("Per creare altre voci bisogna prima registrare questi campi obbligatori", 44, 232, 424, 25) GUICtrlSetColor(-1, 0xFF0000) GUISetState(@SW_SHOW, $insrec)
While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE, $annulla GUIDelete($insrec) GUISwitch($Main) ExitLoop Case $addrecs _addrec(GUICtrlRead($sAccount), GUICtrlRead($sUser), GUICtrlRead($sEmail), GUICtrlRead($sPass)) EndSwitch WEnd
EndFunc
Func _updategui() ;Aggiorna la GUI principale
GUICtrlSetData($List1, "") ;Flush lista Local $aArray = IniReadSectionNames($settingfile) If Not @error Then For $i = 2 To $aArray[0] GUICtrlSetData($List1, $aArray[$i] & "|") Next Else MsgBox(16,"Errore","Possibili cause:" & @CRLF & "Cancellazione o spostamento volontaria del file settings") EndIf
EndFunc
Func _readrec()
$hide = 1
Local $top1 = $top Local $guiHeight = $Height Local $iPosition
$vListItem = GUICtrlRead($List1)
If $vListItem = "" Then Return
;Read the keys and its values Local $aReadSect = IniReadSection($settingfile, $vListItem)
$aLabel = $aReadSect[0][0] $aInput = $aReadSect[0][0]
$iNum = UBound($aReadSect)
$guiHeight = ($iNum - 1) * $Height $ReadRecGUI = GUICreate($vListItem, 585, $guiHeight, 192, 124)
Local $aLabel[$iNum] Local $aInput[$iNum]
If $sh = 1 Then For $i = 1 To $iNum -1 $iPosition = StringInStr($aReadSect[$i][1], "0x") If $iPosition = 1 Then $aReadSect[$i][1] = StringEncrypt(False, $aReadSect[$i][1], $key) EndIf Next $sh = Null $hide = 0 EndIf
;For cicle to create a GUI depends on Array Rows becouse on IniReadSections we have a Two dimensional Array like that #cs dim an array of 2 dimensions like that--------- $aReadSect[0][0] = Total values Quantity $aReadSect[1][0] = 1st Key $aReadSect[1][1] = 1st Value $aReadSect[2][0] = 2nd Key $aReadSect[2][1] = 2nd Value ... $aReadSect[n][0] = nth Key $aReadSect[n][1] = nth Value #ce ----------------------------------------------- ;~ $inum = UBound($aReadSect) already written on line 255
For $i = 1 To $iNum -1 $aLabel[$i] = GUICtrlCreateLabel(($aReadSect[$i][0]), $left, $top1, 489, 24) GUICtrlSetFont(-1, 12, 400, 0, "Segoe UI") GUICtrlSetColor(-1, 0x0066CC) $aInput[$i] = GUICtrlCreateInput(($aReadSect[$i][1]), $left, $top1 + 24, 489, 21) $top1 = $top1 + 50 Next Local $copyToClip = GUICtrlCreateButton("", 520, 24, 49, 49, $BS_ICON) GUICtrlSetTip($copyToClip,"Copia Password nella clipboard") GUICtrlSetImage(-1, @TempDir&"\edit.ico", -1) Local $show = GUICtrlCreateButton("", 520, 87, 49, 49, $BS_ICON) GUICtrlSetImage(-1, @TempDir&"\eye.ico", -1) $modButton = GUICtrlCreateButton("Accetta modifiche", 336, $guiHeight - 52, 113, 41) $cancelButton = GUICtrlCreateButton("Annulla modifiche", 456, $guiHeight -52, 113, 41) $addNewField = GUICtrlCreateButton("Aggiungi Records", 216, $guiHeight -52, 113, 41) GUISetState(@SW_SHOW,$ReadRecGUI)
While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE GUIDelete($ReadRecGUI) GUISwitch($Main) ExitLoop Case $copyToClip Case $addNewField _addField() GUIDelete($ReadRecGUI) _readrec() ;Aggiorno la GUI per visualizzare le nuove voci Case $show If $hide = 1 Then $sh = 1 GUIDelete($ReadRecGUI) _readrec() EndSwitch WEnd
EndFunc
Func _addField()
$addrecGUI = GUICreate("Add Records", 515, 274, 253, 152) $recLabel1 = GUICtrlCreateLabel("Record 1°", 16, 16, 72, 25) GUICtrlSetFont(-1, 12, 400, 0, "Segoe UI") GUICtrlSetColor(-1, 0x0066CC) $recName = GUICtrlCreateInput("Inserisci il nome del Record", 16, 48, 481, 21) $recValue = GUICtrlCreateInput("Inserisci il valore del Record", 16, 80, 481, 21) $recLabel2 = GUICtrlCreateLabel("Record 2°", 16, 120, 72, 25) GUICtrlSetFont(-1, 12, 400, 0, "Segoe UI") GUICtrlSetColor(-1, 0x0066CC) $recName1 = GUICtrlCreateInput("Inserisci il nome del Record", 16, 152, 481, 21) $recValue1 = GUICtrlCreateInput("Inserisci il valore del Record", 16, 184, 481, 21) $Checkbox1 = GUICtrlCreateCheckbox("Cripta Record", 408, 16, 89, 25) $Checkbox2 = GUICtrlCreateCheckbox("Cripta Record", 408, 120, 89, 25) $okButton = GUICtrlCreateButton("Aggiungi Records", 197, 224, 121, 33) $cancelButton1 = GUICtrlCreateButton("Annulla", 376, 224, 121, 33) GUISetState(@SW_SHOW,$addrecGUI)
While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE , $cancelButton1 GUIDelete($addrecGUI) GUISwitch($ReadRecGUI) ExitLoop Case $okButton _writeField() GUIDelete($addrecGUI) GUISwitch($ReadRecGUI) ExitLoop EndSwitch WEnd
EndFunc
Func _writeField()
$aRead [$NARRAY] = UBound($aRead) ;Numero dimensioni array $aRead [$FIELD1] = GUICtrlRead($recName) ;Legge il Nome del Record 1 $aRead [$FIELD2] = GUICtrlRead($recName1) ;Legge il Nome del Record 2 $aRead [$VALUE1] = GUICtrlRead($recValue) ;Legge il Valore del Record 1 $aRead [$VALUE2] = GUICtrlRead($recValue1) ;Legge il Valore del Record 2
Local $vEn1, $vEn2
If $aRead [$VALUE1] = "" Then Return
;Controllo se devo criptare il primo valore altrimenti lo scrivo in chiaro If _IsChecked($Checkbox1) Then $vEn1 = StringEncrypt(True, $aRead [$VALUE1], $key) IniWrite($settingfile, $vListItem, $aRead [$FIELD1], $vEn1)
Else IniWrite($settingfile, $vListItem, $aRead [$FIELD1], $aRead[$VALUE1]) EndIf
If $aRead[$FIELD2] = "" Then MsgBox(64,"Okay","Dati aggiunti con successo!") Return ;Se nel campo 2 non è inserito nessuna voce termino la funzione EndIf
;Controllo se devo criptare il secondo valore altrimenti lo scrivo in chiaro If _IsChecked($Checkbox2) Then $vEn2 = StringEncrypt(True, $aRead [$VALUE2], $key) IniWrite($settingfile, $vListItem, $aRead [$FIELD2], $vEn2)
Else IniWrite($settingfile, $vListItem, $aRead [$FIELD2], $aRead[$VALUE2]) EndIf
MsgBox(64,"Okay","Dati aggiunti con successo!")
EndFunc
Func _addrec($account, $uRec, $email ,$pRec) ;Funzione custom per aggiungere i record e se necessario oscurarli
If $account = "" Then MsgBox(16,"","Nothing to add -.-",1) Return EndIf
Local $uEncrypted = StringEncrypt(True, $uRec, $key) Local $pEncrypted = StringEncrypt(True, $pRec, $key)
IniWrite($settingfile, $account, "Username", $uEncrypted) IniWrite($settingfile, $account, "Email", $email) IniWrite($settingfile, $account, "Password", $pEncrypted)
MsgBox(64,"Added","Record added successfully!")
EndFunc
Func _writereg()
Local $user = GUICtrlRead($userreg) Local $masterkey = GUICtrlRead($masterpassreg)
If $user == "" And $masterkey == "" Then SetError(1) Return EndIf
Local $uEncrypted = StringEncrypt(True, $user, $key) Local $mkEncrypted = StringEncrypt(True, $masterkey, $key)
;Creo il file setting.ini nella script directory If Not _FileCreate($settingfile) Then MsgBox($MB_SYSTEMMODAL, "Error", " Error Creating/Resetting. error:" & @error) EndIf
;Write Data IniWrite($settingfile, "User", "username", $uEncrypted) IniWrite($settingfile, "User", "key", $mkEncrypted)
MsgBox($MB_SYSTEMMODAL, "Attenzione", "Non dimenticare mai queste info, stampale se necessario oppure scrivilo" & _ " o ricordalo a mente, non avrai modo di accedere alle tue password dimenticando la MasterKey." & @CRLF & @CRLF & _ "User: " & $user & @CRLF & _ "Master Key: " & $masterkey)
;Destroy data $user = Null $masterkey = Null $uEncrypted = Null $mkEncrypted = Null
EndFunc
Func StringEncrypt($bEncrypt, $sData, $sPassword)
Local $vReturn = ""
If $sData == "" Then Return
If $bEncrypt Then $vReturn = _Crypt_EncryptData($sData, $sPassword, $CALG_AES_256) Else $vReturn = BinaryToString(_Crypt_DecryptData($sData, $sPassword, $CALG_AES_256)) EndIf
Return $vReturn
EndFunc ;==>StringEncrypt
Func _checkreg($iUser, $iPass)
Local $vReturn = ""
If $iUser == "" And $iPass == "" Then SetError(1) Return $vReturn EndIf
;Leggo settings.ini Sezione User Local $uRead = IniRead($settingfile, "User", "username", "Default Value") Local $mkRead = IniRead($settingfile, "User", "key", "Default Value")
Local $uEncrypted = StringEncrypt(True, $iUser, $key) Local $mkEncrypted = StringEncrypt(True, $iPass, $key)
;checking data If $uRead <> $uEncrypted Or $mkRead <> $mkEncrypted Then $vReturn = False SetError(2) Else $vReturn = True MsgBox(64,$name,"Access Granted!") EndIf
Return $vReturn EndFunc
Func _IsChecked($idControlID) ;Controlla se le checkbox sono spuntate o meno Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED EndFunc
Func _about() MsgBox(64,"About","Password Manager created by : Giuseppe 'hacktooth' Catania" & @CRLF & "Reason : Too bored, too poor for pay Dashline" & @CRLF & "When: on december 2021") EndFunc
Func _esci()
If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer $iMsgBoxAnswer = MsgBox(36,"Esci","Sei sicuro di uscire dal programma :(") Select Case $iMsgBoxAnswer = 6 ;Sì _Crypt_Shutdown() ; Shutdown the crypt library. Exit EndSelect
EndFunc Bug track e implementazione di funzionalità ------------------------------------------------------------------------------------------------- Legenda implementazione di funzionalità +++ = Priorità massima ++ = Priorità media + = Priorità bassa (non è detto che venga aggiunta) ------------------------------------------------------------------------------------------------- Legenda Bug fix *** = Critico ( da attribuire solo per motivi di sicurezza dei dati ) ** = Grave * = Lieve ------------------------------------------------------------------------------------------------- IMPLEMENTAZIONE FUNZIONALITA' +++ Aggiungere la rimozione degli accounts +++ Aggiungere la modifica dei records su _readrec() ++ Aggiungere Importazione/Esportazione file settings.ini ++ Implementare la categorizzazione degli Accounts per tipo esempio (Email, Shopping, Socials, Games, etc ...) + Orientare il funzionamento del Software su soluzioni in Cloud + Far chiudere la finestra GUI_addrec() una volta aggiunto l'account + Nella finestra principale [GUI_main()] visualizzare i records degli Accounts solo dopo aver premuto INVIO e non più tramite Click DX del mouse ------------------------------------------------------------------------------------------------- BUG NOTI ** GUI_main() non risponde ai comandi solo dopo 3 click su GUI_CLOSE_EVENT Come generare il bug : Su GUI_main() cliccare su un record appare GUI_readrec(), cliccare successivamente il pulsante per visualizzare i record cifrati chiudere GUI_readrec() per ritornare su GUI_main() ------------------------------------------------------------------------------------------------- * Altezza di GUI_readrec() non è sempre proporzionale al numero totale di records su un Account Come generare il bug : Da GUI_main() selezionare un Account con records totali superiori a 3 * Su GUI_addField() non inserire records se il testo di Default nelle label non è stato cambiato
|