Mega Code Archive

 
Categories / Delphi / System
 

How to extract exedllocx ... file information

Title: How to extract exe/dll/ocx ... file information Question: If you want to check a file version or product name of an existing system dll, or you are creating an install program that only installs newer versions of dll or exe. * Works with all Delphi versions Answer: Its a simple function that retuns the iformation requested. You can use a VersionInfo array element to pass as the parameter: Label1.Caption := GetFileInfo('c:\windows\explorer.exe', VersionInfo[3]); or Label1.Caption := GetFileInfo('c:\windows\explorer.exe', 'FileVersion'); =============================================== unit lFilever; interface uses WinTypes, WinProcs, SysUtils {$IFNDEF WIN32} ,Ver {$ENDIF}; const VersionInfo: array [1..8] of string = ( 'CompanyName', 'FileDescription', 'FileVersion', 'InternalName', 'LegalCopyRight', 'OriginalFileName', 'ProductName', 'ProductVersion'); function GetFileInfo(FName, InfoType: string): string; implementation function GetFileInfo(FName, InfoType: string): string; var Info : Pointer; InfoData : Pointer; InfoSize : LongInt; InfoLen : {$IFDEF WIN32} DWORD;{$ELSE} LongInt; {$ENDIF} DataLen : {$IFDEF WIN32} UInt; {$ELSE} word; {$ENDIF} LangPtr : Pointer; begin result:=''; DataLen:=255; if Length(FName) FName:=FName+#0; InfoSize:=GetFileVersionInfoSize(@Fname[1], InfoLen); if (InfoSize 0) then begin GetMem(Info, InfoSize); try if GetFileVersionInfo(@FName[1], InfoLen, InfoSize, Info) then begin if VerQueryValue(Info,'\VarFileInfo\Translation',LangPtr, DataLen) then InfoType:=Format('\StringFileInfo\%0.4x%0.4x\%s'#0,[LoWord(LongInt(LangPtr^)), HiWord(LongInt(LangPtr^)), InfoType]); if VerQueryValue(Info,@InfoType[1],InfoData,Datalen) then Result := strPas(InfoData); end; finally FreeMem(Info, InfoSize); end; end; end; end.