구글링해서 찾은 내용입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
type TEXEVersionData = record CompanyName, FileDescription, FileVersion, InternalName, LegalCopyright, LegalTrademarks, OriginalFileName, ProductName, ProductVersion, Comments, PrivateBuild, SpecialBuild: string; end; //------------------------------------------------------------------ function GetEXEVersionData(const FileName: string): TEXEVersionData; type PLandCodepage = ^TLandCodepage; TLandCodepage = record wLanguage, wCodePage: word; end; var dummy, len: cardinal; buf, pntr: pointer; lang: string; begin len := GetFileVersionInfoSize(PChar(FileName), dummy); if len = 0 then RaiseLastOSError; GetMem(buf, len); try if not GetFileVersionInfo(PChar(FileName), 0, len, buf) then RaiseLastOSError; if not VerQueryValue(buf, '\VarFileInfo\Translation\', pntr, len) then RaiseLastOSError; lang := Format('%.4x%.4x', [PLandCodepage(pntr)^.wLanguage, PLandCodepage(pntr)^.wCodePage]); if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\CompanyName'), pntr, len){ and (@len <> nil)} then result.CompanyName := PChar(pntr); if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\FileDescription'), pntr, len){ and (@len <> nil)} then result.FileDescription := PChar(pntr); if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\FileVersion'), pntr, len){ and (@len <> nil)} then result.FileVersion := PChar(pntr); if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\InternalName'), pntr, len){ and (@len <> nil)} then result.InternalName := PChar(pntr); if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\LegalCopyright'), pntr, len){ and (@len <> nil)} then result.LegalCopyright := PChar(pntr); if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\LegalTrademarks'), pntr, len){ and (@len <> nil)} then result.LegalTrademarks := PChar(pntr); if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\OriginalFileName'), pntr, len){ and (@len <> nil)} then result.OriginalFileName := PChar(pntr); if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\ProductName'), pntr, len){ and (@len <> nil)} then result.ProductName := PChar(pntr); if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\ProductVersion'), pntr, len){ and (@len <> nil)} then result.ProductVersion := PChar(pntr); if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\Comments'), pntr, len){ and (@len <> nil)} then result.Comments := PChar(pntr); if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\PrivateBuild'), pntr, len){ and (@len <> nil)} then result.PrivateBuild := PChar(pntr); if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\SpecialBuild'), pntr, len){ and (@len <> nil)} then result.SpecialBuild := PChar(pntr); finally FreeMem(buf); end; end; // 호출 에제 procedure TForm1.Button1Click(Sender: TObject); var info : TEXEVersionData; begin info := GetEXEVersionData('C:\Program Files\AhnLab\V3Lite30\V3Lite.exe'); memo1.lines.Add( 'ProductName : ' + info.ProductName ); memo1.Lines.Add( 'FileVersion : ' + info.FileVersion ); memo1.lines.Add( 'ProductVersion : ' + info.ProductVersion ); end; |