现谢谢各位.

解决方案 »

  1.   

    你了解PE文件的结构就没问题了
    文件操作而已至于细节,就自己研究了http://lysoft.7u7.net
      

  2.   

    DELPHI好象可以改吧,我看了我同事做了一个,也没看他用什么别的工具
      

  3.   

    应要求,贴出取版本的代码.呵呵,给不给分啊? procedure TExeVersionInfo.GetVersionInfo;
    const
      InfoNum = 9;
      InfoStr: array[1..InfoNum] of string = (
          'ProductName',
          'ProductVersion',
          'FileDescription',
          'LegalCopyright',
          'FileVersion',
          'CompanyName',
          'LegalTradeMarks',
          'InternalName',
          'OriginalFileName');
    var
      S: string;
      BufSize, Len: DWORD;
      Buf: PChar;
      Value: PChar;
    begin
      S := Application.ExeName;
      BufSize := GetFileVersionInfoSize(PChar(S), BufSize);
      if BufSize > 0 then
      begin
        Buf := AllocMem(BufSize);
        GetFileVersionInfo(PChar(S), 0, BufSize, Buf);
        if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[1]), Pointer(Value), Len) then
           FProductName := Value;
        if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[2]), Pointer(Value), Len) then
           FProductVersion := Value;
        if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[3]), Pointer(Value), Len) then
           FFileDescription := Value;
        if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[4]), Pointer(Value), Len) then
           FLegalCopyright := Value;
        if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[5]), Pointer(Value), Len) then
           FFileVersion := Value;
        if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[6]), Pointer(Value), Len) then
           FCompanyName := Value;
        if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[7]), Pointer(Value), Len) then
           FLegalTrades := Value;
        if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[8]), Pointer(Value), Len) then
           FInternalName := Value;
        if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[9]), Pointer(Value), Len) then
           FOriginalFilename := Value;
        FreeMem(Buf, BufSize);
      end
      else
      begin
        MessageBox(Application.handle,'无版本信息!','asd',MB_OK);
      end;
    end;
      

  4.   

    去看看《Delphi下window核心编程》的配书源码中有个例子吧!!
      

  5.   

    delphi下面有这个例子,可以编辑资源的
      

  6.   

    extcsdn(Studing VB now) 
    我没有书,请把源码发到:[email protected], 万分感谢.
    快乐老猫(无米下炊) 
    Delphi下的那个Demo是的,没找到.谢谢.
      

  7.   

    X:\Program Files\Borland\Delphi7\Demos\ResXplor用 DCC32.EXE 编译下就OK,就是只有读取的代码,不过能读就可以写,自己修改下,不是什么大事。
      

  8.   

    楼主,看我的。function getProductVersion(fn:String):String;
    var
      n, Len: DWORD;
      Buf: PChar;
      Value: PChar;
    begin
      result := '';
      n := GetFileVersionInfoSize(PChar(fn), n);
      if n > 0 then
      begin
        Buf := AllocMem(n);
        GetFileVersionInfo(PChar(fn), 0, n, Buf);
        
        //080404b0  PRC unicode
        //040904E4  english multilingual
        //080403a8  prc unknown
     
        if VerQueryValue(Buf, PChar('StringFileInfo\080403a8\productVersion'),Pointer(Value), Len) then
            result := String(Value);
        FreeMem(Buf, n);
      end;
    end;