精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Delphi>>其他>>如何获得某exe文件的相关信息

主题:如何获得某exe文件的相关信息
发信人: kingron( )
整理人: teleme(2001-05-08 12:35:23), 站内信件
文件的大小的等信息很简单,我就不说了。
下面的代码调试通过了:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
type
  TFileInfo = packed record
    CommpanyName: string;
    FileDescription: string;
    FileVersion: string;
    InternalName: string;
    LegalCopyright: string;
    LegalTrademarks: string;
    OriginalFileName: string;
    ProductName: string;
    ProductVersion: string;
    Comments: string;
    UserDefineValue: string;
  end;

function GetFileVersionInfomation(const FileName: string; var info: TFileInfo):
  boolean;
var
  VersionInfo: Pointer;
  InfoSize: DWORD;
  InfoPointer: Pointer;
  Translation: Pointer;
  VersionValue: string;
  unused: DWORD;
begin
  unused := 0;
  Result := False;
  InfoSize := GetFileVersionInfoSize(pchar(FileName), unused);
  if InfoSize > 0 then
  begin
    GetMem(VersionInfo, InfoSize);
    Result := GetFileVersionInfo(pchar(FileName), 0, InfoSize, VersionInfo);
    if Result then
    begin
      VerQueryValue(VersionInfo, '\VarFileInfo\Translation', Translation, InfoSize);
      VersionValue := '\StringFileInfo\' + IntToHex(LoWord(Longint(Translation^)), 4) +
        IntToHex(HiWord(Longint(Translation^)), 4) + '\';
      VerQueryValue(VersionInfo, pchar(VersionValue + 'CompanyName'), InfoPointer, InfoSize);
      info.CommpanyName := string(pchar(InfoPointer));
      VerQueryValue(VersionInfo, pchar(VersionValue + 'FileDescription'), InfoPointer, InfoSize);
      info.FileDescription := string(pchar(InfoPointer));
      VerQueryValue(VersionInfo, pchar(VersionValue + 'FileVersion'), InfoPointer, InfoSize);
      info.FileVersion := string(pchar(InfoPointer));
      VerQueryValue(VersionInfo, pchar(VersionValue + 'InternalName'), InfoPointer, InfoSize);
      info.InternalName := string(pchar(InfoPointer));
      VerQueryValue(VersionInfo, pchar(VersionValue + 'LegalCopyright'), InfoPointer, InfoSize);
      info.LegalCopyright := string(pchar(InfoPointer));
      VerQueryValue(VersionInfo, pchar(VersionValue + 'LegalTrademarks'), InfoPointer, InfoSize);
      info.LegalTrademarks := string(pchar(InfoPointer));
      VerQueryValue(VersionInfo, pchar(VersionValue + 'OriginalFileName'), InfoPointer, InfoSize);
      info.OriginalFileName := string(pchar(InfoPointer));
      VerQueryValue(VersionInfo, pchar(VersionValue + 'ProductName'), InfoPointer, InfoSize);
      info.ProductName := string(pchar(InfoPointer));
      VerQueryValue(VersionInfo, pchar(VersionValue + 'ProductVersion'), InfoPointer, InfoSize);
      info.ProductVersion := string(pchar(InfoPointer));
      VerQueryValue(VersionInfo, pchar(VersionValue + 'Comments'), InfoPointer, InfoSize);
      info.Comments := string(pchar(InfoPointer));
    end;
    FreeMem(VersionInfo);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  info: TFileInfo;
begin
  if OpenDialog1.Execute then
  begin
    if GetFileVersionInfomation(opendialog1.FileName, info) then
    begin
      Listbox1.Items.Add(OpenDialog1.FileName);
      ListBox1.Items.Add('Comments:' + info.Comments);
      ListBox1.Items.Add('CommpanyName:' + info.CommpanyName);
      ListBox1.Items.Add('FileDescription:' + info.FileDescription);
      ListBox1.Items.Add('FileVersion:' + info.FileVersion);
      ListBox1.Items.Add('InternalName:' + info.InternalName);
      ListBox1.Items.Add('LegalCopyright:' + info.LegalCopyright);
      ListBox1.Items.Add('LegalTrademarks:' + info.LegalTrademarks);
      ListBox1.Items.Add('OriginalFileName:' + info.OriginalFileName);
      ListBox1.Items.Add('ProductName:' + info.ProductName);
      ListBox1.Items.Add('ProductVersion:' + info.ProductVersion);
    end;
  end;
end;

end.


----
██████   没有你,赢了世界又如何?
█┏━━┓█       没有最好,只有更好
█┃之金┃█   广州社区Delphi版直达快车
█┃印龍┃█       技术问题请勿寄到信箱,此类信件将被忽略
█┗━━┛█   Good Good Study,Day Day Up
██████       一场幽梦同谁近,千古情人我独痴
   

[关闭][返回]