在程序中如何得到本程序的版本信息?(50分)

  • 主题发起人 主题发起人 flora
  • 开始时间 开始时间
F

flora

Unregistered / Unconfirmed
GUEST, unregistred user!
也就是说,怎么样在about窗口中显示本程序的版本号?我想应该有一个全局变量,可是查不到.
 
反正是你自己写的程序,为什么不直接写进去非要花这样工夫?
 
try version label, it has source, and u could find it at ShenDuLiXian
 
youself 5.0中有一versionresource控件,可能有用
 
呵呵,要不用个
STRING类型,作个全局的变量。
 
对,我就是用的string全局变量.
 
可是我想用程序内部的版本号,不想手工填入,深度历险上有个程序是生成一个RES文件,需要重新编译,感觉有点麻烦,难道就没有比较爽的办法吗?程序内部肯定是有版本信息的,查看文件属性就可以看到.
 
说工
写吧.
 
我作了试验,Delphi是把版本号、公司名称等加在可执行文件的最后面,而且都是字
符。但是没有提供任何常量或方法来访问它。估计(仅仅是估计)有专门的API函数可供
调用。
 
版本信息是resource, 有api可以获得. 不过显得很麻烦. 不值得.
要取得version信息:
用EnumResourceNames取得RT_VERSION的name.
用这个name调用FindResource取得RT_VERSION的HRSRC
用这个HRSRC调用loadresource取得version resource结构.
 
VERSION LABE满好用的
 
以前我写过一个API读取版本号例程的, 后来一次硬盘的劫难没有了.
如果你不急, 过两天我回忆一下,也许还能响起来.
 
API Function GetVersionEx is a good function to get the version of
a program.
 
GetVersionEx 是操作系统的版本吧?
 
我查了一下,可以用'GetFileVersionInfo'读取内部版本信息到一缓冲区,再用API'VerQueryValue'
读取某一指定内容;如果要测算版本信息的size,用'GetFileVersionInfoSize'。
 
下面的函数可以得到文件的版本信息,注意,delphi做的程序,如果想
包含版本信息, 必须在菜单"project/options/version info"里面
添加版本信息.
function GetVersion;
var
InfoSize, Wnd: DWORD;
VerBuf: Pointer;
szName: array[0..255] of Char;
Value: Pointer;
Len: UINT;
TransString:string;
begin
InfoSize := GetFileVersionInfoSize(PChar(FileName), Wnd);
if InfoSize <> 0 then
begin
GetMem(VerBuf, InfoSize);
try
if GetFileVersionInfo(PChar(FileName), Wnd, InfoSize, VerBuf) then
begin
Value :=nil;
VerQueryValue(VerBuf, '/VarFileInfo/Translation', Value, Len);
if Value <> nil then
TransString := IntToHex(MakeLong(HiWord(Longint(Value^)), LoWord(Longint(Value^))), 8);
Result := '';
StrPCopy(szName, '/StringFileInfo/'+Transstring+'/FileVersion');
^^^^^^^此处换成ProductVersion得到的是"产品版本"
if VerQueryValue(VerBuf, szName, Value, Len) then
Result := StrPas(PChar(Value));
end;
finally
FreeMem(VerBuf);
end;
end;
end;
 
更正,函数声明为:
function GetVersion(filename:string):string;

忘了加参数了. :-)
 
看来问题远远比我想的复杂.不知大家还有没有好的办法,如果没有
我就把50分给cAkk了.
 
CJ,能不能把你的VERSION Label仔细讲一讲,我没搞明白.
 
to flora: 你是不是从VB过来的? 因为VB里面的App对象有个属性就是自己的版本号.
 
后退
顶部