小问题:如何取得当前文件的版本号?(50分)

  • 主题发起人 主题发起人 king_qqq
  • 开始时间 开始时间
K

king_qqq

Unregistered / Unconfirmed
GUEST, unregistred user!
如何取得当前文件的版本号?delphi帮助中的例程竟然取不到!
 
好像是的
 
可以用api函数实现
 
可否把函数给出来?[:(]
 
GetFileVersionInfo
 
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;
可以取出bpl的版本号的啊
测试代码如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
//指定某个文件的版本号
ShowMessage(GetVersionString('d:/Program Files/Borland/Delphi7/Bin/applet70.bpl'));
//如果是当前应用程序则以下代码:
showmessage(GetVersionString(application.ExeName));
end;
 
function TForm1.GetVersion: string;
var
dwHandle, dwLen, puLen: Cardinal;
lpData: array[0..1023] of Char;
tmpInfo: pchar;
lpSubBlock: string;
lplpPointer: Pointer;
Lang: dword;
begin
tmpInfo := StrAlloc(256);

dwLen := GetFileVersionInfoSize(pchar(Edit1.Text), dwHandle);
if dwLen = 0 then exit;

if not GetFileVersionInfo(pchar(Edit1.Text), dwHandle, dwLen, @lpData) then
exit;

lpSubBlock := '/VarFileInfo/Translation';
if VerQueryValue(@lpData, pchar(lpSubBlock), lplpPointer, puLen) then begin
Lang := dword(lplpPointer^);

//取得版本号
lpSubBlock := Format('/StringFileInfo/%.04X%.04X/FileVersion',
[LoWord(Lang), HiWord(Lang)]);
if VerQueryValue(@lpData, pchar(lpSubBlock), lplpPointer, puLen) then begin
StrCopy(tmpInfo, lplpPointer);
Result := 'V[' + StrPas(tmpInfo) + ']';
end;
end;
StrDispose(tmpInfo);
end;///貌似上面有啦,拣着用吧[:)]
 
上两位给的答案都很好用,多谢!
 
想追加分数,未遂,只好平均分配,再谢!
 
多人接受答案了。
 
后退
顶部