Delphi 程序版本及更新时间检测代码 [code delphi] function GetVersionString(FileName: string): string; //得到文件版本 var VerInfoSize: DWORD; VerInfo: Pointer; VerValueSize: DWORD; Dummy: DWORD; VerValue: PVSFixedFileInfo; begin Result := ''; VerInfoSize := GetFileVersionInfoSize(PChar(FileName), Dummy); if VerInfoSize = 0 then Exit; GetMem(VerInfo, VerInfoSize); GetFileVersionInfo(PChar(FileName), 0, VerInfoSize, VerInfo); VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize); Result := IntToStr(VerValue^.dwFileVersionMS shr 16) + '.' + IntToStr(VerValue^.dwFileVersionMS and $FFFF) + '.' + IntToStr(VerValue^.dwFileVersionLS shr 16) + '.' + IntToStr(VerValue^.dwFileVersionLS and $FFFF); FreeMem(VerInfo); end; function GetFileCreationTime(const Filename: string): TDateTime; //获应用程序时间 var Data: TWin32FindData; H: THandle; FT: TFileTime; I: Integer; begin { Data.ftCreationTime: TFileTime; //创建时间 Data.ftLastAccessTime: TFileTime; //最后访问时间 Data.ftLastWriteTime: TFileTime; //最后修改时间 } H := FindFirstFile(PCHAR(Filename), Data); if H <> INVALID_HANDLE_VALUE then begin try FileTimeToLocalFileTime(Data.ftLastWriteTime, FT); FileTimeToDosDateTime(FT, LongRec(I).Hi, LongRec(I).Lo); Result := FileDateToDateTime(I); finally Windows.FindClose(H); end
end else begin Result := 0; end; end;
procedure TForm1.Button1Click(Sender: TObject); var exeFn:string; //程序名 exeFnP:string; //文件全名 exeLastUpdate:TDateTime; //最后更新时间 exeVer:string; //版本号; dbLastUpdate:TDateTime; begin exeFnP:=application.exename; //获文件全名(含路径) exeFn:=extractfilename(exeFnP); //获
程序名(不含路径) exeLastUpdate:=GetFileCreationTime(exeFnP); exeVer:=GetVersionString(exeFnP); adoquery1.SQL.Clear; adoquery1.SQL.Text:='select * from Ver where fileName='''+exeFn+''''; adoquery1.Open; if not adoquery1.Eof then begin dbLastUpdate:=adoquery1.fieldbyname('FileUpdate').Value; end else begin //如果没有记录,写入新记录 adoquery1.Append; adoquery1.FieldByName('Filename').Value:=exeFn; adoquery1.FieldByName('FileVer').Value:=exeVer; adoquery1.FieldByName('FileUpdate').Value:=exeLastUpdate; adoquery1.Post; end; if dbLastUpdate
exeLastUpdate then //程序版本不是最新版本 application.MessageBox(pchar(exeFn+'已有新的版本,请升级至最新版本!'),'升级
提示',MB_OK+MB_ICONEXCLAMATION); memo1.text:=datetimetostr(dbLastUpdate)+'><'+datetimetoStr(exeLastUpdate); end; [/code]