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 dbLastUpdateexeLastUpdate then //程序版本不是最新版本
application.MessageBox(pchar(exeFn+'已有新的版本,请升级至最新版本~'),'升级
提示',MB_OK+MB_ICONEXCLAMATION);
memo1.text:=datetimetostr(dbLastUpdate)+'><'+datetimetoStr(exeLastUpdate);
end;
[/code]