Advertisement
Guest User

Untitled

a guest
Apr 18th, 2014
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.76 KB | None | 0 0
  1. type
  2. TEXEVersionData = record
  3. CompanyName,
  4. FileDescription,
  5. FileVersion,
  6. InternalName,
  7. LegalCopyright,
  8. LegalTrademarks,
  9. OriginalFileName,
  10. ProductName,
  11. ProductVersion,
  12. Comments,
  13. PrivateBuild,
  14. SpecialBuild: string;
  15. end;
  16.  
  17. function GetEXEVersionData(const FileName: string): TEXEVersionData;
  18. type
  19. PLandCodepage = ^TLandCodepage;
  20. TLandCodepage = record
  21. wLanguage,
  22. wCodePage: word;
  23. end;
  24. var
  25. dummy,
  26. len: cardinal;
  27. buf, pntr: pointer;
  28. lang: string;
  29. begin
  30. len := GetFileVersionInfoSize(PChar(FileName), dummy);
  31. if len = 0 then
  32. RaiseLastOSError;
  33. GetMem(buf, len);
  34. try
  35. if not GetFileVersionInfo(PChar(FileName), 0, len, buf) then
  36. RaiseLastOSError;
  37.  
  38. if not VerQueryValue(buf, 'VarFileInfoTranslation', pntr, len) then
  39. RaiseLastOSError;
  40.  
  41. lang := Format('%.4x%.4x', [PLandCodepage(pntr)^.wLanguage, PLandCodepage(pntr)^.wCodePage]);
  42.  
  43. if VerQueryValue(buf, PChar('StringFileInfo' + lang + 'CompanyName'), pntr, len){ and (@len <> nil)} then
  44. result.CompanyName := PChar(pntr);
  45. if VerQueryValue(buf, PChar('StringFileInfo' + lang + 'FileDescription'), pntr, len){ and (@len <> nil)} then
  46. result.FileDescription := PChar(pntr);
  47. if VerQueryValue(buf, PChar('StringFileInfo' + lang + 'FileVersion'), pntr, len){ and (@len <> nil)} then
  48. result.FileVersion := PChar(pntr);
  49. if VerQueryValue(buf, PChar('StringFileInfo' + lang + 'InternalName'), pntr, len){ and (@len <> nil)} then
  50. result.InternalName := PChar(pntr);
  51. if VerQueryValue(buf, PChar('StringFileInfo' + lang + 'LegalCopyright'), pntr, len){ and (@len <> nil)} then
  52. result.LegalCopyright := PChar(pntr);
  53. if VerQueryValue(buf, PChar('StringFileInfo' + lang + 'LegalTrademarks'), pntr, len){ and (@len <> nil)} then
  54. result.LegalTrademarks := PChar(pntr);
  55. if VerQueryValue(buf, PChar('StringFileInfo' + lang + 'OriginalFileName'), pntr, len){ and (@len <> nil)} then
  56. result.OriginalFileName := PChar(pntr);
  57. if VerQueryValue(buf, PChar('StringFileInfo' + lang + 'ProductName'), pntr, len){ and (@len <> nil)} then
  58. result.ProductName := PChar(pntr);
  59. if VerQueryValue(buf, PChar('StringFileInfo' + lang + 'ProductVersion'), pntr, len){ and (@len <> nil)} then
  60. result.ProductVersion := PChar(pntr);
  61. if VerQueryValue(buf, PChar('StringFileInfo' + lang + 'Comments'), pntr, len){ and (@len <> nil)} then
  62. result.Comments := PChar(pntr);
  63. if VerQueryValue(buf, PChar('StringFileInfo' + lang + 'PrivateBuild'), pntr, len){ and (@len <> nil)} then
  64. result.PrivateBuild := PChar(pntr);
  65. if VerQueryValue(buf, PChar('StringFileInfo' + lang + 'SpecialBuild'), pntr, len){ and (@len <> nil)} then
  66. result.SpecialBuild := PChar(pntr);
  67. finally
  68. FreeMem(buf);
  69. end;
  70. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement