Что я делаю не так
| Код | //объявляем Type TFileInfo = Record CompanyName : String; FileDescription : String; FileVersion : String; InternalName : String; LegalCopyright : String; LegalTradeMarks : String; OriginalFileName : String; ProductName : String; ProductVersion : String; Comments : String; end;
|
почему-то возвращает пустые значения
| Код | function TfmPass.xGetExeFileInfo(sAppName:string):TFileInfo; type PTransBuffer = ^TTransBuffer; TTransBuffer = array[1..4] of smallint; var iAppSize, iLenOfValue : DWord; pcBuf,pcValue : PChar; VerSize : DWord; pTrans : PTransBuffer; TransStr : string; fvip : pointer; ft : TFileTime; st : TSystemTime; i:Integer; Res : String; sl : TStringList; const AK47 : array [0..9] of string = ('CompanyName','FileDescription','FileVersion', 'InternalName','LegalCopyright', 'LegalTradeMarks', 'OriginalFileName','ProductName', 'ProductVersion','Comments' ); begin Result.CompanyName := ''; Result.FileDescription := ''; Result.FileVersion := ''; Result.InternalName := ''; Result.LegalCopyright := ''; Result.LegalTradeMarks := ''; Result.OriginalFileName := ''; Result.ProductName := ''; Result.ProductVersion := ''; Result.Comments := '';
// get version information values iAppSize:= GetFileVersionInfoSize(PChar(sAppName),// pointer to filename string iAppSize); // pointer to variable to receive zero // if GetFileVersionInfoSize is successful if iAppSize > 0 then begin pcBuf := AllocMem(iAppSize); GetFileVersionInfo(PChar(sAppName), // pointer to filename string 0, // ignored iAppSize, // size of buffer pcBuf); // pointer to buffer to receive file-version info.
VerQueryValue(pcBuf, '\', fvip, iLenOfValue); VerQueryValue(pcBuf, PChar('\VarFileInfo\Translation'),pointer(ptrans), verSize); TransStr:= IntToHex(ptrans^[1], 4) + IntToHex(ptrans^[2], 4);
for i:=0 to 9 do begin Case i of 0: if VerQueryValue(pcBuf,PChar('StringFileInfo\' + TransStr + '\' + AK47[i] ), Pointer(pcValue),iLenOfValue) then Result.CompanyName := pcValue; 1: if VerQueryValue(pcBuf,PChar('StringFileInfo\' + TransStr + '\' + AK47[i] ), Pointer(pcValue),iLenOfValue) then Result.FileDescription := pcValue; 2: if VerQueryValue(pcBuf,PChar('StringFileInfo\' + TransStr + '\' + AK47[i] ), Pointer(pcValue),iLenOfValue) then Result.FileVersion := pcValue; 3:if VerQueryValue(pcBuf,PChar('StringFileInfo\' + TransStr + '\' + AK47[i] ), Pointer(pcValue),iLenOfValue) then Result.InternalName := pcValue; 4:if VerQueryValue(pcBuf,PChar('StringFileInfo\' + TransStr + '\' + AK47[i] ), Pointer(pcValue),iLenOfValue) then Result.LegalCopyright := pcValue; 5:if VerQueryValue(pcBuf,PChar('StringFileInfo\' + TransStr + '\' + AK47[i] ), Pointer(pcValue),iLenOfValue) then Result.LegalTradeMarks :=pcValue; 6:if VerQueryValue(pcBuf,PChar('StringFileInfo\' + TransStr + '\' + AK47[i] ), Pointer(pcValue),iLenOfValue) then Result.OriginalFileName := pcValue; 7:if VerQueryValue(pcBuf,PChar('StringFileInfo\' + TransStr + '\' + AK47[i] ), Pointer(pcValue),iLenOfValue) then Result.ProductName := pcValue; 8:if VerQueryValue(pcBuf,PChar('StringFileInfo\' + TransStr + '\' + AK47[i] ), Pointer(pcValue),iLenOfValue) then Result.ProductVersion := pcValue; 9:if VerQueryValue(pcBuf,PChar('StringFileInfo\' + TransStr + '\' + AK47[i] ), Pointer(pcValue),iLenOfValue) then Result.Comments := pcValue; end;//case end; FreeMem(pcBuf,iAppSize); end; end;
| Добавлено @ 12:06 | Код | //так читаю Var FI : TFileInfo; begin if not FileExists(FileName) then exit; try FI := xGetExeFileInfo(FileName); Image := TImage.Create(fmPass); Image.Name := 'Image'+IntToStr(iName); Image.Parent := fmPass; Image.Picture.Icon.Handle := ExtractIcon(Application.Handle, PChar(FileName), 0); Image.Top := T; Image.Left := L; Image.Height := h;//Image.Picture.Icon.Height; Image.Width := w;//Image.Picture.Icon.Width; Image.Hint := FI.ProductName;//<- Пустота ..
| |