The ini file should contain the version number of your script that you have stored online someplace. The url should contain the location to download that version of the script.
You can see how to call the function with this example:
Code:
;This is the function-call. The part that tells autohotkey to execute the function below.
Check_ForUpdate(1)
;The 1 tells the function to use 1 as the first paramater - setting "_ReplaceCurrentSCript" to 1.
;This is the actual function.
Check_ForUpdate(_ReplaceCurrentScript = 0, _SuppressMsgBox = 0, _CallbackFunction = "", ByRef _Information = "")
{
;Version.ini file format
;
;[Info]
;Version=1.4
;URL=http://www.mywebsite.com/my%20file.ahk or .exe
;MD5=00000000000000000000000000000000 or omit this key completly to skip the MD5 file validation
Static Script_Name := "Self Script Updater" ;Your script name
, Version_Number := 1.3 ;The script's version number
, Update_URL := "http://www.autohotkey.net/~Rseding91/Self%20Script%20Updater/Version.ini" ;The URL of the version.ini file for your script
, Retry_Count := 3 ;Retry count for if/when anything goes wrong
Random,Filler,10000000,99999999
Version_File := A_Temp . "\" . Filler . ".ini"
, Temp_FileName := A_Temp . "\" . Filler . ".tmp"
, VBS_FileName := A_Temp . "\" . Filler . ".vbs"
Loop,% Retry_Count
{
_Information := ""
UrlDownloadToFile,%Update_URL%,%Version_File%
IniRead,Version,%Version_File%,Info,Version,N/A
If (Version = "N/A"){
FileDelete,%Version_File%
If (A_Index = Retry_Count)
_Information .= "The version info file doesn't have a ""Version"" key in the ""Info"" section or the file can't be downloaded."
Else
Sleep,500
Continue
}
If (Version > Version_Number){
If (_SuppressMsgBox != 1 and _SuppressMsgBox != 3){
MsgBox,0x4,New version available,There is a new version of %Script_Name% available.`nCurrent version: %Version_Number%`nNew version: %Version%`n`nWould you like to download it now?
IfMsgBox,Yes
MsgBox_Result := 1
}
If (_SuppressMsgBox or MsgBox_Result){
IniRead,URL,%Version_File%,Info,URL,N/A
If (URL = "N/A")
_Information .= "The version info file doesn't have a valid URL key."
Else {
SplitPath,URL,,,Extension
If (Extension = "ahk" And A_AHKPath = "")
_Information .= "The new version of the script is an .ahk filetype and you do not have AutoHotKey installed on this computer.`r`nReplacing the current script is not supported."
Else If (Extension != "exe" And Extension != "ahk")
_Information .= "The new file to download is not an .EXE or an .AHK file type. Replacing the current script is not supported."
Else {
IniRead,MD5,%Version_File%,Info,MD5,N/A
Loop,% Retry_Count
{
UrlDownloadToFile,%URL%,%Temp_FileName%
IfExist,%Temp_FileName%
{
If (MD5 = "N/A"){
_Information .= "The version info file doesn't have a valid MD5 key."
, Success := True
Break
} Else {
H := DllCall("CreateFile","Str",Temp_FileName,"UInt",0x80000000,"UInt",3,"UInt",0,"UInt",3,"UInt",0,"UInt",0)
, VarSetCapacity(FileSize,8,0)
, DllCall("GetFileSizeEx","UInt",H,"Int64",&FileSize)
, FileSize := NumGet(FileSize,0,"Int64")
, FileSize := FileSize = -1 ? 0 : FileSize
If (FileSize != 0){
VarSetCapacity(Data,FileSize,0)
, DllCall("ReadFile","UInt",H,"UInt",&Data,"UInt",FileSize,"UInt",0,"UInt",0)
, DllCall("CloseHandle","UInt",H)
, VarSetCapacity(MD5_CTX,104,0)
, DllCall("advapi32\MD5Init",Str,MD5_CTX)
, DllCall("advapi32\MD5Update",Str,MD5_CTX,"UInt",&Data,"UInt",FileSize)
, DllCall("advapi32\MD5Final",Str,MD5_CTX)
FileMD5 := ""
Loop % StrLen(Hex:="123456789ABCDEF0")
N := NumGet(MD5_CTX,87+A_Index,"Char"), FileMD5 .= SubStr(Hex,N>>4,1) . SubStr(Hex,N&15,1)
VarSetCapacity(Data,FileSize,0)
, VarSetCapacity(Data,0)
If (FileMD5 != MD5){
FileDelete,%Temp_FileName%
If (A_Index = Retry_Count)
_Information .= "The MD5 hash of the downloaded file does not match the MD5 hash in the version info file."
Else
Sleep,500
Continue
} Else
Success := True
} Else {
DllCall("CloseHandle","UInt",H)
Success := True
}
}
} Else {
If (A_Index = Retry_Count)
_Information .= "Unable to download the latest version of the file from " %URL% "."
Else
Sleep,500
Continue
}
}
}
}
}
} Else
_Information .= "No update was found."
FileDelete,%Version_File%
Break
}
If (_ReplaceCurrentScript And Success){
SplitPath,URL,,,Extension
Process,Exist
MyPID := ErrorLevel
VBS_P1 =
(LTrim Join`r`n
On Error Resume Next
Set objShell = CreateObject("WScript.Shell")
objShell.Run "TaskKill -f -im %MyPID%", WindowStyle, WaitOnReturn
WScript.Sleep 1000
Set objFSO = CreateObject("Scripting.FileSystemObject")
)
If (A_IsCompiled){
If (Extension = "exe"){
VBS_P2 =
(LTrim Join`r`n
objFSO.CopyFile "%Temp_FileName%", "%A_ScriptFullPath%", True
objFSO.DeleteFile "%Temp_FileName%", True
objShell.Run """%A_ScriptFullPath%"""
)
Return_Val := Temp_FileName
} Else { ;Extension is ahk
SplitPath,A_ScriptFullPath,,FDirectory,,FName
FileMove,%Temp_FileName%,%FDirectory%\%FName%.ahk,1
FileDelete,%Temp_FileName%
VBS_P2 =
(LTrim Join`r`n
objFSO.DeleteFile "%A_ScriptFullPath%", True
objShell.Run """%FDirectory%\%FName%.ahk"""
)
Return_Val := FDirectory . "\" . FName . ".ahk"
}
} Else {
If (Extension = "ahk"){
FileMove,%Temp_FileName%,%A_ScriptFullPath%,1
If (Errorlevel)
_Information .= "Error (" Errorlevel ") unable to replace current script with the latest version."
Else {
VBS_P2 =
(LTrim Join`r`n
objShell.Run """%A_ScriptFullPath%"""
)
Return_Val := A_ScriptFullPath
}
} Else If (Extension = "exe"){
SplitPath,A_ScriptFullPath,,FDirectory,,FName
FileMove,%Temp_FileName%,%FDirectory%\%FName%.exe,1
FileDelete,%A_ScriptFullPath%
VBS_P2 =
(LTrim Join`r`n
objShell.Run """%FDirectory%\%FName%.exe"""
)
Return_Val := FDirectory . "\" . FName . ".exe"
} Else {
FileDelete,%Temp_FileName%
_Information .= "The downloaded file is not an .EXE or an .AHK file type. Replacing the current script is not supported."
}
}
VBS_P3 =
(LTrim Join`r`n
objFSO.DeleteFile "%VBS_FileName%", True
Set objFSO = Nothing
Set objShell = Nothing
)
If (_SuppressMsgBox < 2)
VBS_P3 .= "`r`nWScript.Echo ""Update complected successfully."""
FileDelete,%VBS_FileName%
FileAppend,%VBS_P1%`r`n%VBS_P2%`r`n%VBS_P3%,%VBS_FileName%
If (_CallbackFunction != ""){
If (IsFunc(_CallbackFunction))
%_CallbackFunction%()
Else
_Information .= "The callback function is not a valid function name."
}
RunWait,%VBS_FileName%,%A_Temp%,VBS_PID
Sleep,2000
Process,Close,%VBS_PID%
_Information := "Error (?) unable to replace current script with the latest version.`r`nPlease make sure your computer supports running .vbs scripts and that the script isn't running in a pipe."
}
_Information := _Information = "" ? "None" : _Information
Return Return_Val
}
If you need help understanding functions, just open up the autohotkey manual and search for "function." There is a section on them that should explain there use better then I could.