获取文件信息
type
  TFileInfo = packed record
    CommpanyName: string;
    FileDescription: string;
    FileVersion: string;
    InternalName: string;
    LegalCopyright: string;
    LegalTrades: string;
    OriginalFileName: string;
    ProductName: string;
    ProductVersion: string;
    Comments: string;
    VsFixedFileInfo:VS_FIXEDFILEINFO;
    UserDefineValue:string;
  end;function GetFileVersionInfomation(const FileName: string; var info: TFileInfo;UserDefine:string=''):
  boolean;
const
  SFInfo= '\StringFileInfo\';
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 := SFInfo + 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 + 'LegalTrades'), InfoPointer, InfoSize);
      info.LegalTrades := 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));
      if VerQueryValue(VersionInfo, '\', InfoPointer, InfoSize) then
        info.VsFixedFileInfo := TVSFixedFileInfo(InfoPointer^);
      if UserDefine<>'' then
      begin
        if VerQueryValue(VersionInfo,pchar(VersionValue+UserDefine),InfoPointer,InfoSize) then
          info.UserDefineValue:=string(pchar(InfoPointer));
      end;
    end;
    FreeMem(VersionInfo);
  end;
end;

解决方案 »

  1.   

    调用演示:procedure TForm1.Button1Click(Sender: TObject);
    var
      info: TFileInfo;
    begin
      if OpenDialog1.Execute then
      begin
        if GetFileVersionInfomation(opendialog1.FileName, info,'WOW Version') 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('LegalTrades:' + info.LegalTrades);
          ListBox1.Items.Add('OriginalFileName:' + info.OriginalFileName);
          ListBox1.Items.Add('ProductName:' + info.ProductName);
          ListBox1.Items.Add('ProductVersion:' + info.ProductVersion);
          ListBox1.Items.Add('UserDefineValue:' + info.UserDefineValue);
          if boolean(info.VsFixedFileInfo.dwFileFlags and vs_FF_Debug) then
           listbox1.Items.Add('Debug:True')
           else
           ListBox1.Items.Add('Debug:False');
          ListBox1.Items.Add('');
        end;
      end;
    end;
    *******************
      

  2.   

    我试了不行啊。我用的是winxp操作系统。我追踪了一下,
    InfoSize := GetFileVersionInfoSize(pchar(FileName), unused);这句,不管是什么文件都返回0
      

  3.   

    这段代码只能检测出delphi写的程序,并且有版本信息的程序。我要能看任何文档的摘要信息的代码
      

  4.   

    不止这些信息。如office文档还有其作者,公司等信息
    mp3文件有歌的相关信息。总之是文件属性中看到的关于文件的扩展信息。