Delphi 写的 ActiveX 获取自己版本号的办法 |
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
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; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |