ReadIni e WriteIni non funzionano! Nessun ini salvato... perchè ?

« Older   Newer »
  Share  
DjDiabolik
CAT_IMG Posted on 24/11/2016, 14:48     +1   -1




Allora ragazzi (se volete e se ritenete a qualcuno interessi lo posto anche)... mi sono creato una piccola gui che di volta in volta ho aggiornato per la creazione e l'esecuzione del comando dos Shutdown in modo di poter pianificare, su un sistema windows che sia seven.. 8 o anche windows 10, un riavvio o lo spegnimento stesso del pc dopo x ore x minuti e x secondi con 3 valori settabili dalla gui.

Il tutto funziona a meraviglia........... ora però ad un'ulteriore aggiornamento volevo aggiungere una feature in modo che il programma salvi le ultime impostazioni usate su un file .ini e che vada a leggere questo file .ini appunto quando lo si riavvia la volta successiva!

Per fare questo ho messo questa cosa all'inizio, pensando di aver fatto tutto correttamente:
CODICE
Global Const $SettingsFile = "ShutdownGUI_settings.ini"


Con questa variabile ho appunto settato il nome dell'eventuale file .ini..... poi subito all'inizio del codice ho messo questa roba qua creando un func:
CODICE
Func ReadIniFile()
       Global $ValOre = IniRead($SettingsFile, "LastUsage", "LastOre", "0")
       Global $ValMinuti = IniRead($SettingsFile, "LastUsage", "LastMinuti", "10")
       Global $ValSecondi = IniRead($SettingsFile, "LastUsage", "LastSecondi", "0")
       Global $ValCheckbox = IniRead($SettingsFile, "LastUsage", "LastCheckbox", "0")
EndFunc


Allora fino a questo punto qua tutto sembra funzionare..... o meglio.... appunto se non trova il file in questione per le 4 variabili lui si imposta quei 4 valori.
Il problema sta però che se quel file creato esiste sembra effettivamente non leggere niente di niente!

Poi va bè....... per ora ho saltato questo punto e ho provato a fargli salvare il file almeno mettendo quest'altro func poco prima che venga lanciato il comando dos:
CODICE
Func WriteIniFile()
       IniWrite($SettingsFile, "LastUsage", "LastOre", $ValOre)
       IniWrite($SettingsFile, "LastUsage", "LastMinuti", $ValMinuti)
       IniWrite($SettingsFile, "LastUsage", "LastSecondi", $ValSecondi)
       IniWrite($SettingsFile, "LastUsage", "LastCheckbox", $ValCheckbox)
EndFunc

Il problema sta che anche qua...... il file .ini non viene affatto creato................

Il file .au3 quando lo vai ad eseguire non restituisce errori.... ma non mi spiego il perchè questo file .ini non viene ne creato, ne letto ne salvato.............
Leggendo i vari help del "IniRead" e "IniWrite" sembra tutto mooolto semplice..... ma poi non lo è perchè di fatto non funziona nada.

Com'è che funziona il tutto ?

*EDIT*
Anche perchè c'è un'altra stranezza........ io ho preso di pari e patta gli esempi di autoit e li ho pizzati in file .au3. Anche li per il IniWrite (www.autoitscript.com/autoit3/docs/functions/IniWrite.htm) a me alla fine non esce nessun file .ini ed ovviamente ho tolto la riga in basso per far cancellare il file ed ho cambiato il path mettendo direttamente file.ini......
Ancora una volta.... com'è che funziona ?
 
Top
DjDiabolik
CAT_IMG Posted on 24/11/2016, 15:11     +1   -1




Ok ragazzi........ A volte la soluzione la hai sotto al naso..... ho trovato semplicemente con google:
CODICE
Global Const $SettingsFile = @ScriptDir & "\ShutdownGUI_settings.ini"


Bastava mettere @ScriptDir sulla variabile e da quello che ho capito il file .ini viene salvato sulla stessa cartella dov'è il file .au3.

Credo funzioni alla stessa maniera una volta convertito il file .au3 in .exe e tale file .ini venga creato nella stessa cartella dov'è il file .exe.

Visto che ci sono......mi sembra giusto mettervi a conoscenza dell'intera gui cosi che potrete rendervi conto di cosa ho fatto e se magari sapete come poterla migliorare :):
CODICE
#NoTrayIcon
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>

;Legge Variabili dal file .ini
Global Const $SettingsFile = @ScriptDir & "\ShutdownGUI_settings.ini"
;Global $VarFileExist = FileExists($FilePath)
;If $VarFileExist then
       ;ReadIniFile()
;EndIf
ReadIniFile()


#Region ### START Koda GUI section ### Form=D:\AutoIT\Miei Progetti\Shutdown GUI\ShutdownGUI.kxf
$Main = GUICreate("Shutdown GUI 3.0", 508, 205, 192, 124)
$Label1 = GUICtrlCreateLabel("Ore", 72, 24, 21, 17)
$Label2 = GUICtrlCreateLabel("Minuti", 208, 24, 32, 17)
$Label3 = GUICtrlCreateLabel("Secondi", 344, 24, 43, 17)
$Checkbox1 = GUICtrlCreateCheckbox("Riavvia PC", 64, 112, 97, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Spegni PC", 168, 112, 97, 17)
If $ValCheckbox = 0 then
       GUICtrlSetState($Checkbox1, $GUI_CHECKED)
       GUICtrlSetState($Checkbox2, $GUI_UNCHECKED)
Else
       GUICtrlSetState($Checkbox1, $GUI_UNCHECKED)
       GUICtrlSetState($Checkbox2, $GUI_CHECKED)
EndIf

$Input1 = GUICtrlCreateInput("", 8, 168, 361, 21,$ES_READONLY)
$Label4 = GUICtrlCreateLabel("Preview Comando:", 8, 144, 93, 17)
$Esegui = GUICtrlCreateButton("Esegui", 376, 128, 113, 65)

$SetOre = GUICtrlCreateInput($ValOre, 56, 48, 73, 54, $ES_READONLY)
GUICtrlSetFont(-1, 30, 400, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xE3E3E3)
GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-1, 59, 0)


$SetMinuti = GUICtrlCreateInput($ValMinuti, 208, 48, 73, 54, $ES_READONLY)
GUICtrlSetFont(-1, 30, 400, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xE3E3E3)
GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-1, 59, 0)

$SetSecondi = GUICtrlCreateInput($ValSecondi, 344, 48, 73, 54, $ES_READONLY)
GUICtrlSetFont(-1, 30, 400, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xE3E3E3)
GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-1, 59, 0)

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

;Run ("shutdown /a")
Global $MainCommand = "shutdown "
Global $Opt1 = "/r "
Converti()

Global $Opt2 = "/t " & $TotaleSecondi
GUICtrlSetData ( $Input1, $MainCommand & $Opt1 & $Opt2 )


While 1
       $nMsg = GUIGetMsg()
       Switch $nMsg
               Case $GUI_EVENT_CLOSE
                       Exit

               Case $Checkbox1
                       GUICtrlSetState ( $Checkbox2 , $GUI_UNCHECKED )
                       GUICtrlSetState ( $Checkbox1 , $GUI_CHECKED )
                       Global $ValCheckbox = 0
                       Global $Opt1 = "/r "
                       GUICtrlSetData ( $Input1, $MainCommand & $Opt1 & $Opt2 )
               Case $Checkbox2
                       GUICtrlSetState ( $Checkbox1 , $GUI_UNCHECKED )
                       GUICtrlSetState ( $Checkbox2 , $GUI_CHECKED )
                       Global $ValCheckbox = 1
                       Global $Opt1 = "/s "
                       GUICtrlSetData ( $Input1, $MainCommand & $Opt1 & $Opt2 )
               Case $Esegui
                       WriteIniFile()
                       $Comando = $MainCommand & $Opt1 & $Opt2
                       ;Run ($Comando)
                       Exit
               Case $SetOre
                       Converti()
                       Global $Opt2 = "/t " & $TotaleSecondi
                       GUICtrlSetData ( $Input1, $MainCommand & $Opt1 & $Opt2 )
               Case $SetMinuti
                       Converti()
                       Global $Opt2 = "/t " & $TotaleSecondi
                       GUICtrlSetData ( $Input1, $MainCommand & $Opt1 & $Opt2 )
               Case $SetSecondi
                       Converti()
                       Global $Opt2 = "/t " & $TotaleSecondi
                       GUICtrlSetData ( $Input1, $MainCommand & $Opt1 & $Opt2 )                        
       EndSwitch
WEnd

Func Converti()
       Global $OreInSecondi = GUICtrlRead ($SetOre) * 3600
       Global $MinutiInSecondi = GUICtrlRead ($SetMinuti) * 60
       Global $Secondi = GUICtrlRead ($SetSecondi)
       Global $TotaleSecondi = $OreInSecondi + $MinutiInSecondi + $Secondi
EndFunc

Func ReadIniFile()
       Global $ValOre = IniRead($SettingsFile, "LastUsage", "LastOre", "0")
       Global $ValMinuti = IniRead($SettingsFile, "LastUsage", "LastMinuti", "10")
       Global $ValSecondi = IniRead($SettingsFile, "LastUsage", "LastSecondi", "0")
       Global $ValCheckbox = IniRead($SettingsFile, "LastUsage", "LastCheckbox", "0")
EndFunc

Func WriteIniFile()
       IniWrite($SettingsFile, "LastUsage", "LastOre", GUICtrlRead ($SetOre))
       IniWrite($SettingsFile, "LastUsage", "LastMinuti", GUICtrlRead ($SetMinuti))
       IniWrite($SettingsFile, "LastUsage", "LastSecondi", GUICtrlRead ($SetSecondi))
       IniWrite($SettingsFile, "LastUsage", "LastCheckbox", $ValCheckbox)
EndFunc


Ovviamente tutte le varie righe commentate sono quelle che di volta in volta andavo per tentativi........
Poi do una ripulita al tutto :)

Ora se c'è una cosa che c'è da decommentare sono i comandi RUN che vanno ad eseguire i veri e propri comandi dal prompt dello "shutdown".
Ed ecco una cosa che vorrei cercare di fixare ? Come vedete all'inizio del programma (o della gui) io faccio avviare un "shutdown /a". Questo in pratica fa si che tutte le varie pianificazioni attive al momento vengano appunto annullate in modo che poi puoi ricrearla e magari correggere il timing.

Una cosa che sarebbe da fare è quella di interrogare eventuali pianificazioni..... e appunto invece di cancellarli a priori inserire un qualcosa tipo una richiesta che ti dica "C'è un RIAVVIO (o un REBOOT) già programmato" e che magari quindi ti dia delle info in merito e ti chieda se vuoi modificarlo o meno e se si lancia lo "shutdown /a" e se invece dai no semplicemente termina il programma senza toccare niente...........

Sotto questo aspetto devo capire dov'è che lo shutdown piazza i suoi riavvi o spegnimenti programmati.... se avete consigli sono ben accettati.
 
Top
1 replies since 24/11/2016, 14:48   21 views
  Share