線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2164
推到 Plurk!
推到 Facebook!

Delphi 写的 ActiveX 获取自己版本号的办法

 
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-05-22 19:29:34 IP:59.40.xxx.xxx 訂閱
Delphi 的程序,可以通过 Application.ExeName 来获得。不过,如果没有 Application 的时候,怎么办?可以在 
单元里引用 Forms 单元。还有一个办法,就是用 GetModuleName 这个函数。
通常,这个函数的参数(handle)给 0 就可以了。

但如果你的执行文件是 DLL 或 OCX 等等,就不行了。这时候,用 Application.ExeName 获得的是调用你的 DLL 的外部
程序的名字。用 GetModuleName(0),获得的也是调用你的 DLL 的外部程序的名字。

GetModuleName 的参数应该是你的执行代码的 Handle ,在 DELPHI 的程序里,应该是:
GetModuleName(hInstance)

这样,即使是 Active Form,也可以获得自己的名字(包括路径)。如果用GetModuleName(0)获得的是IE浏览器的名字!

获得自己的名字后,用以下代码,可以获得自己的版本号:

------------------------------
type
TFileVersionInfo = record
fCompanyName,
fFileDescription,
fFileVersion,
fInternalName,
fLegalCopyRight,
fLegalTradeMark,
fOriginalFileName,
fProductName,
fProductVersion,
fComments: string;
end;

var
FileVersionInfo: TFileVersionInfo;

procedure GetAppVersionInfo(sAppNamePath: string);

var
VerSize: integer;
VerBuf: PChar;
VerBufValue: pointer;
{$IFDEF Delphi3Below}
VerHandle: integer;
VerBufLen: integer;
{$ELSE}
VerHandle: cardinal;
VerBufLen: cardinal;
{$ENDIF}
VerKey: string;

function GetInfo(ThisKey: string): string;
begin
Result := '';
VerKey := '\StringFileInfo\'
IntToHex(loword(integer(VerBufValue^)), 4)
IntToHex(hiword(integer(VerBufValue^)), 4) '\' ThisKey;
if VerQueryValue(VerBuf, PChar(VerKey), VerBufValue, VerBufLen)
then
Result := StrPas(VerBufValue);
end;

function QueryValue(ThisValue: string): string;
begin
Result := '';
if GetFileVersionInfo(PChar(sAppNamePath), VerHandle, VerSize,
VerBuf) and
VerQueryValue(VerBuf, '\VarFileInfo\Translation', VerBufValue,
VerBufLen) then
Result := GetInfo(ThisValue);
end;

begin
if sAppNamePath = '' then
sAppNamePath := Application.ExeName;
VerSize := GetFileVersionInfoSize(PChar(sAppNamePath), VerHandle);
VerBuf := AllocMem(VerSize);
try
FileVersionInfo.fCompanyName := QueryValue('CompanyName');
FileVersionInfo.fFileDescription :=
QueryValue('FileDescription');
FileVersionInfo.fFileVersion := QueryValue('FileVersion');
FileVersionInfo.fInternalName := QueryValue('InternalName');
FileVersionInfo.fLegalCopyRight := QueryValue('LegalCopyRight');
FileVersionInfo.fLegalTradeMark := QueryValue('LegalTradeMark');
FileVersionInfo.fOriginalFileName :=
QueryValue('OriginalFileName');
FileVersionInfo.fProductName := QueryValue('ProductName');
FileVersionInfo.fProductVersion := QueryValue('ProductVersion');
FileVersionInfo.fComments := QueryValue('Comments');
finally
FreeMem(VerBuf, VerSize);
end;
end;
系統時間:2024-07-06 20:23:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!