读取可执行文件版本的问题 ( 积分: 50 )

  • 主题发起人 主题发起人 lufang
  • 开始时间 开始时间
L

lufang

Unregistered / Unconfirmed
GUEST, unregistred user!
因工作需要,需要读取PB编译的EXE文件的版本,以下代码对于一般的可执行文件都能正确得到结果,但对于PB编译的EXE却什么都读不出来,但WINDOWS的属性页里却能读出,请问这是为什么?对了,读PB的EXE时,CodePage,LanguageID的值&nbsp;和别的EXE不一样,是否和这有关,如何解决?<br>如下代码:<br>procedure&nbsp;TForm1.Button2Click(Sender:&nbsp;TObject);<br>const<br>&nbsp;&nbsp;SNotAvailable&nbsp;=&nbsp;'Value&nbsp;Not&nbsp;Available';<br>var<br>&nbsp;&nbsp;LanguageID:&nbsp;string;<br>&nbsp;&nbsp;CodePage:&nbsp;string;<br>&nbsp;&nbsp;TranslationLength:&nbsp;Cardinal;<br>&nbsp;&nbsp;TranslationTable:&nbsp;Pointer;<br>&nbsp;&nbsp;InfoSize,&nbsp;Temp,&nbsp;Len:&nbsp;DWord;<br>&nbsp;&nbsp;InfoBuf:&nbsp;Pointer;<br>&nbsp;&nbsp;CompanyName,&nbsp;FileDescription,&nbsp;FileVersion,&nbsp;InternalName,&nbsp;LegalCopyright:<br>&nbsp;&nbsp;string;<br>&nbsp;&nbsp;LegalTradeMarks,&nbsp;OriginalFilename,&nbsp;ProductName,&nbsp;ProductVersion,&nbsp;Comments:<br>&nbsp;&nbsp;string;<br>&nbsp;&nbsp;Value:&nbsp;PChar;<br>&nbsp;&nbsp;LookupString,&nbsp;FilePath:&nbsp;string;<br>&nbsp;&nbsp;FVersionInfoAvailable:&nbsp;Boolean;<br>&nbsp;&nbsp;a:string;<br>begin<br>&nbsp;&nbsp;FilePath&nbsp;:=&nbsp;'d:/windows/regedit.exe';//windows带的<br>&nbsp;&nbsp;filepath:='e:/PSSETUP.EXE';//用PB编译的<br>&nbsp;&nbsp;InfoSize&nbsp;:=&nbsp;GetFileVersionInfoSize(PChar(FilePath),&nbsp;Temp);<br>&nbsp;&nbsp;FVersionInfoAvailable&nbsp;:=&nbsp;InfoSize&nbsp;&gt;&nbsp;0;<br>&nbsp;&nbsp;if&nbsp;FVersionInfoAvailable&nbsp;then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;InfoBuf&nbsp;:=&nbsp;AllocMem(InfoSize);<br>&nbsp;&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetFileVersionInfo(PChar(FilePath),&nbsp;0,&nbsp;InfoSize,&nbsp;InfoBuf);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;VerQueryValue(InfoBuf,&nbsp;'/VarFileInfo/Translation',&nbsp;TranslationTable,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TranslationLength)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CodePage&nbsp;:=&nbsp;Format('%.4x',&nbsp;[HiWord(PLongInt(TranslationTable)^)]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LanguageID&nbsp;:=&nbsp;Format('%.4x',&nbsp;[LoWord(PLongInt(TranslationTable)^)]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LookupString&nbsp;:=&nbsp;'StringFileInfo/'&nbsp;+&nbsp;LanguageID&nbsp;+&nbsp;CodePage&nbsp;+&nbsp;'/';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;VerQueryValue(InfoBuf,&nbsp;PChar(LookupString&nbsp;+&nbsp;'CompanyName'),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pointer(Value),&nbsp;Len)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CompanyName&nbsp;:=&nbsp;Value;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;VerQueryValue(InfoBuf,&nbsp;PChar(LookupString&nbsp;+&nbsp;'FileDescription'),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pointer(Value),&nbsp;Len)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileDescription&nbsp;:=&nbsp;Value;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;VerQueryValue(InfoBuf,&nbsp;PChar(LookupString&nbsp;+&nbsp;'FileVersion'),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pointer(Value),&nbsp;Len)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileVersion&nbsp;:=&nbsp;Value;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;VerQueryValue(InfoBuf,&nbsp;PChar(LookupString&nbsp;+&nbsp;'InternalName'),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pointer(Value),&nbsp;Len)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InternalName&nbsp;:=&nbsp;Value;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;VerQueryValue(InfoBuf,&nbsp;PChar(LookupString&nbsp;+&nbsp;'LegalCopyright'),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pointer(Value),&nbsp;Len)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LegalCopyright&nbsp;:=&nbsp;Value;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;VerQueryValue(InfoBuf,&nbsp;PChar(LookupString&nbsp;+&nbsp;'LegalTrademarks'),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pointer(Value),&nbsp;Len)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LegalTradeMarks&nbsp;:=&nbsp;Value;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;VerQueryValue(InfoBuf,&nbsp;PChar(LookupString&nbsp;+&nbsp;'OriginalFilename'),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pointer(Value),&nbsp;Len)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OriginalFilename&nbsp;:=&nbsp;Value;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;VerQueryValue(InfoBuf,&nbsp;PChar(LookupString&nbsp;+&nbsp;'ProductName'),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pointer(Value),&nbsp;Len)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProductName&nbsp;:=&nbsp;Value;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;VerQueryValue(InfoBuf,&nbsp;PChar(LookupString&nbsp;+&nbsp;'ProductVersion'),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pointer(Value),&nbsp;Len)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProductVersion&nbsp;:=&nbsp;Value;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;VerQueryValue(InfoBuf,&nbsp;PChar(LookupString&nbsp;+&nbsp;'Comments'),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pointer(Value),&nbsp;Len)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Comments&nbsp;:=&nbsp;Value;<br>&nbsp;&nbsp;&nbsp;&nbsp;finally<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FreeMem(InfoBuf,&nbsp;InfoSize);<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;CompanyName&nbsp;:=&nbsp;SNotAvailable;<br>&nbsp;&nbsp;&nbsp;&nbsp;FileDescription&nbsp;:=&nbsp;SNotAvailable;<br>&nbsp;&nbsp;&nbsp;&nbsp;FileVersion&nbsp;:=&nbsp;SNotAvailable;<br>&nbsp;&nbsp;&nbsp;&nbsp;InternalName&nbsp;:=&nbsp;SNotAvailable;<br>&nbsp;&nbsp;&nbsp;&nbsp;LegalCopyright&nbsp;:=&nbsp;SNotAvailable;<br>&nbsp;&nbsp;&nbsp;&nbsp;LegalTrademarks&nbsp;:=&nbsp;SNotAvailable;<br>&nbsp;&nbsp;&nbsp;&nbsp;OriginalFilename&nbsp;:=&nbsp;SNotAvailable;<br>&nbsp;&nbsp;&nbsp;&nbsp;ProductName&nbsp;:=&nbsp;SNotAvailable;<br>&nbsp;&nbsp;&nbsp;&nbsp;ProductVersion&nbsp;:=&nbsp;SNotAvailable;<br>&nbsp;&nbsp;&nbsp;&nbsp;Comments&nbsp;:=&nbsp;SNotAvailable;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;Memo1.Lines.Clear;<br>&nbsp;&nbsp;Memo1.Lines.Add(CompanyName);<br>&nbsp;&nbsp;Memo1.Lines.Add(FileDescription);<br>&nbsp;&nbsp;Memo1.Lines.Add(FileVersion);<br>&nbsp;&nbsp;Memo1.Lines.Add(InternalName);<br>&nbsp;&nbsp;Memo1.Lines.Add(LegalCopyright);<br>&nbsp;&nbsp;Memo1.Lines.Add(LegalTrademarks);<br>&nbsp;&nbsp;Memo1.Lines.Add(OriginalFilename);<br>&nbsp;&nbsp;Memo1.Lines.Add(ProductName);<br>&nbsp;&nbsp;Memo1.Lines.Add(ProductVersion);<br>&nbsp;&nbsp;Memo1.Lines.Add(Comments);<br>end;
 
后退
顶部