#Persistent #SingleInstance force D_link = http://tv.rrsyycm.com/autohotkey/download/cy.txt D_kb := InternetFileGetSize(D_link) MsgBox % D_kb ;预设信息 /* 创建界面 -------------------------------------- */ Gui +HwndMyGuiHwnd Gui,Add,Text,,开机运行则隐藏窗口运行 /* 启动时加载 -------------------------------------- */ D_MY=AHK更新 D_bb=1510 D_QQ=4845514 D_bx=版本信息 D_update=http://habit-2015.54fe89771abc8.d01.nanoyun.com/Habit/updatee.txt?fakeParam=%A_Now% /* D_update.txt内容 -------------------------------------- 1513 http://habit-2015.54fe89771abc8.d01.nanoyun.com/Habit/desk.exe?fakeParam=%A_Now% Habit-2044.exe 更新信息 第一行版本号 第二行新版本下载地址 第三行新版本文件名 第四行更新信息 */ Menu,Tray,Icon,shell32.dll,174,1 Menu,Tray,Click,1 Menu,Tray,Add,%D_MY%,Menu Menu,Tray,Add Menu,Tray,Add,联系作者 Menu,Tray,Add,关于信息 Menu,D_SubMenu,Add,开机启动 Menu,D_SubMenu,Add,启动更新 Menu,Tray,Add,系统设置,:D_SubMenu Menu,Tray,Add Menu,Tray,Add,重启脚本 Menu,Tray,Add,退出脚本 Menu,Tray,Default,%D_MY% Menu,Tray,NoStandard Menu,Tray,Tip,%D_MY%`n当前版本:%D_bb% if (A_OSVersion="WIN_7"){ Menu,Tray,Icon,%D_MY%,shell32.dll,157,18 Menu,Tray,Icon,联系作者,shell32.dll,282,18 Menu,Tray,Icon,关于信息,shell32.dll,285,18 Menu,Tray,Icon,系统设置,shell32.dll,288,18 Menu,Tray,Icon,重启脚本,shell32.dll,287,18 Menu,Tray,Icon,退出脚本,shell32.dll,283,18 }else{ Menu,Tray,Icon,%D_MY%,shell32.dll,29,18 Menu,Tray,Icon,联系作者,shell32.dll,171,18 Menu,Tray,Icon,关于信息,shell32.dll,155,18 Menu,Tray,Icon,系统设置,shell32.dll,166,18 Menu,Tray,Icon,重启脚本,shell32.dll,147,18 Menu,Tray,Icon,退出脚本,shell32.dll,113,18 } IfNotExist,%A_Startup%%A_ScriptName%.lnk Gui,Show,AutoSize else Menu,D_SubMenu,ToggleCheck,开机启动 RegRead,D_Read,HKEY_LOCAL_MACHINE,SOFTWARETestKey,MyValueName if D_Read{ Menu,D_SubMenu,ToggleCheck,启动更新 if A_TickCounthttp://www.ahk8.com Gui,D_about:Show,AutoSize,关于 return Menu: DetectHiddenWindows,off IfWinExist,ahk_id %MyGuiHwnd% { Gui,Cancel return } Gui,Show,AutoSize return 开机启动: Menu,D_SubMenu,ToggleCheck,开机启动 IfExist,%A_Startup%%A_ScriptName%.lnk FileDelete,%A_Startup%%A_ScriptName%.lnk else FileCreateShortcut,%A_ScriptFullPath%,%A_Startup%%A_ScriptName%.lnk return 启动更新: Menu,D_SubMenu,ToggleCheck,启动更新 RegRead,D_Read,HKEY_LOCAL_MACHINE,SOFTWARETestKey,MyValueName if D_Read RegDelete,HKEY_LOCAL_MACHINE,SOFTWARETestKey,MyValueName else RegWrite,REG_SZ,HKEY_LOCAL_MACHINE,SOFTWARETestKey,MyValueName,Test Value return GuiClose: Gui,Cancel return 联系作者: Run tencent://message/?uin=%D_QQ% return 重启脚本: Reload 退出脚本: ExitApp 立即检查: SetTimer,立即检查,Off SplitPath,D_update,,,,,OutDrive update:=W_InternetCheckConnection(OutDrive) if not update return D_Array := StrSplit(DownloadToString(D_update,"cp936"),"`n") D_Edit := D_Array[1] ;读取第一行版本号 D_link := D_Array[2] ;读取第二行下载文件连接 D_Name := D_Array[3] ;新文件名 D_xing := D_Array[4] ;更新信息 if D_Edit is not number { TrayTip,,获取更新失败,10, 1 return } if (D_Edit > D_bb) { MsgBox,4,检测到新版本,是否更新至:%D_Edit%`n%D_xing% IfMsgBox Yes gosub,D_Label } return D_Label: D_kb := InternetFileGetSize(D_link) Progress,1,%S_kb%/%D_kb%,正在更新...,AHK更新 FileDelete,%A_Temp%%D_Name% SetTimer,S_Label,500 URLDownloadToFile,%D_link%,%A_Temp%%D_Name% SetTimer,S_Label,Off if ErrorLevel{ TrayTip,,更新文件下载出错,10, 1 return } else{ Progress,100 gosub,ExitSub } return S_Label: ;获取下载临时文件的大小更新进度 FileGetSize,S_kb,%A_Temp%%D_Name% D_xz := S_kb/D_kb D_xz := D_xz*100 StringLeft,D_xz,D_xz,2 Progress,%D_xz%,%S_kb%/%D_kb%,正在更新...,AHK更新 return ExitSub: if (A_IsCompiled) ;自杀并打开更新后的程序 { bat= (LTrim :start ping 127.0.0.1 -n 2>nul del `%1 if exist `%1 goto start copy %A_Temp%%D_Name% %A_ScriptDir% start %D_Name% del `%0 ) batfilename=Delete.bat IfExist %batfilename% FileDelete %batfilename% FileAppend, %bat%, %batfilename% Run,%batfilename% "%A_ScriptFullPath%", , Hide ExitApp } ExitApp W_InternetCheckConnection(lpszUrl){ ;检查FTP服务是否可连接 FLAG_ICC_FORCE_CONNECTION := 0x1 dwReserved := 0x0 return, DllCall("Wininet.dllInternetCheckConnection", "Ptr", &lpszUrl, "UInt", FLAG_ICC_FORCE_CONNECTION, "UInt", dwReserved, "Int") } InternetFileGetSize(URL:=""){ ;获取网络文件大小 Static LIB="WININET", CL="00000000000000", N="" QRL := 16 if ! DllCall( "GetModuleHandle", Str,"wininet.dll" ) DllCall( "LoadLibrary", Str,"wininet.dll" ) if ! hIO:=DllCall( LIB "InternetOpenA", Str,N, UInt,4, Str,N, Str,N, UInt,0 ) return -1 if ! (( hIU:=DllCall( LIB "InternetOpenUrlA", UInt,hIO, Str,URL, Str,N, Int,0, UInt,F, UInt,0 ) ) || ErrorLevel ) return "",0 - ( !DllCall( LIB "InternetCloseHandle", UInt,hIO ) ) - 2 if ! ( RB ) if ( SubStr(URL,1,4) = "ftp:" ) CL := DllCall( LIB "FtpGetFileSize", UInt,hIU, UIntP,0 ) else if ! DllCall( LIB "HttpQueryInfoA", UInt,hIU, Int,5, Str,CL, UIntP,QRL, UInt,0 ) return "",0 - ( !DllCall( LIB "InternetCloseHandle", UInt,hIU ) )-( !DllCall( LIB "InternetCloseHandle", UInt,hIO ) ) - 4 return CL } DownloadToString(URL, encoding="utf-8") { static a := "AutoHotkey/" A_AhkVersion if (!DllCall("LoadLibrary", "str", "wininet") || !(h := DllCall("wininetInternetOpen","str",a,"uint",1, "ptr", 0, "ptr", 0, "uint", 0, "ptr"))) return 0 c:=s:=0,o:="" if(f:=DllCall("wininetInternetOpenUrl","ptr",h,"str",url,"ptr",0,"uint",0,"uint",0x80003000,"ptr",0,"ptr")) { while (DllCall("wininetInternetQueryDataAvailable","ptr",f,"uint*",s,"uint",0,"ptr",0) &&s>0) { VarSetCapacity(b,s,0) DllCall("wininetInternetReadFile","ptr",f,"ptr",&b,"uint",s,"uint*",r) o.= StrGet(&b,r>>(encoding="utf-16"||encoding="cp1200"),encoding) } DllCall("wininetInternetCloseHandle","ptr", f) } DllCall("wininetInternetCloseHandle","ptr",h) return o } /* UrlDownloadToVar(URL,Timeout) { ;下载文件到变量 ComObjError(0) WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1") WebRequest.Open("GET", URL, true) WebRequest.Send() WebRequest.WaitForResponse(Timeout) return WebRequest.ResponseText() }