#Requires AutoHotkey v2 ; v2 only #SingleInstance force ; Only one instance at a time FileEncoding("UTF-8") ; Makes sure the special characters dont break stuff SetWorkingDir(A_MyDocuments "\D3K") ; Make sure we can find the .ahks linked below SetTitleMatchMode(2) global d3k_version := 3 ; The current version ;------------------------------------------------------------------------------ ; INI Manipulation that supports UTF-8 ;------------------------------------------------------------------------------ ini_load(location) { temp := FileOpen(location, "r") cleaner := temp.Read() temp.Close() cleaner := RegExReplace(cleaner, "`am)^[\s\R]*") ; Remove empty lines cleaner := RegExReplace(cleaner, "m)[ \t]+$") ; Get rid of extra space at the end of values (NEEDS FIXED) temp := FileOpen(location, "w") temp.Write(cleaner) temp.Close() temp := FileOpen(location, "r") out := Object() Loop { Line := temp.ReadLine() RegExMatch(Line, "(?
(?<=\[).*(?=\]))|(?.*)=(?.*)", &r) ; Key = r.Key, Value = r.Value, Section = r.Section If (r.Section) { out.%r.Section% := Map() current_Section := r.Section } Else { trimKey := Trim(r.Key, " `t`r`n") trimValue := Trim(r.Value, " `t`r`n") out.%current_Section%[trimKey] := trimValue } } Until (temp.AtEOF) temp.Close() Return out } ini_write(location, inKey, inValue) ; Don't need to specify section because you can only have one hotstring anyway { Critical("On") ini := FileOpen(location, "r") temp := ini.Read() ini.Close() inKeyReg := "(?<=" inKey "=)\S*" ; Regex to make sure we're matching only the value for the requested key temp := RegExReplace(temp, inKeyReg, inValue) ini := FileOpen(location, "w") ini.Write(temp) ini.Close() Critical("Off") } ;------------------------------------------------------------------------------ ; Make sure the settings file exists, if not, create it ;------------------------------------------------------------------------------ sett_ini := A_MyDocuments "\D3Ksettings.ini" ; Where the settings ini is If !FileExist(sett_ini) ; Check if the sett_ini doesn't exist { ini := FileOpen(sett_ini, "w") writethis := " ( LTrim [USpec] Email=LastnameFirstname@JohnDeere.com DocFile=Select File [Main] MJDPaste=1 JDProductNames=1 GloVar=0 [Language] German=0 )" ini.Write(writethis) file.Close() Run("Settings.ahk") ; Runs the GUI for changing the settings, accessible with Alt+Shift+\ (also easy way to restart this script) } ;------------------------------------------------------------------------------ ; Read the sett_ini ;------------------------------------------------------------------------------ ; This is the part that reads the file to see what your settings are. global settings := ini_load(sett_ini) ; started as global variables, keeping this commented out in case there's some old script where I need to replace something ; User Specific things: ;global email := settings.USpec["Email"] ;global docfile := settings.USpec["DocFile"] ; Replacement ;global jdpn := settings.Replacement["JDProductNames"] ;global glovar := settings.Replacement["GloVar"] ; Language ;global ger := settings.Language["German"]