function FileVersion(FileName: string): string;
var Bufer: Pointer;
BufSize, Len, dwHandle: Cardinal;
VerInfo: PVSFixedFileInfo;
s:PAnsiChar;
begin
dwHandle:=0;
Len:=0;
BufSize:=65535;
Bufer:=nil;
Result := 'Не могу прочитать информацию';
s:=PChar(FileName);
BufSize := GetFileVersionInfoSize(s, dwHandle);
if BufSize <> 0 then
begin
GetMem(Bufer, BufSize);
try
GetFileVersionInfo(PChar(FileName), 0{dwHandle}, BufSize, Bufer);
VerQueryValue(Bufer, '\', Pointer(VerInfo), Len);
with VerInfo^ do
Result := Format('%d.%d.%d.%d', [
dwFileVersionMS shr 16,
dwFileVersionMS and $FFFF,
dwFileVersionLS shr 16,
dwFileVersionLS and $FFFF]);
finally
FreeMem(Bufer, BufSize);
end;
end;
end;
чтение информации о файле
Код:
при всем этом
Код:
GetFileVersionInfoSize(s, dwHandle);
Код:
FileName
Может кто нибудь сталкивался с этой проблемой.
Для поиска в чем ошибка, если вернуло 0, используй GetLastError()
Всё должно работать, если FileName - путь к бинарнику (exe/dll/ocx/ax etc.) Для простого (например, текстового) файла, исессьна, не проканает. Только вызов GetFileVersionInfoSize(s, dwHandle) неплохо было б заменить на GetFileVersionInfoSize(s, 0), а то переменная типа DWORD, подставленная вместо указателя на таковую, лично у меня вызывает лёгкую депрессию...
Спасибо, с версией теперь все нормально. А вот если дату создания/редактирования и тд. надо получить - VerQueryValue() использовать или что-то другое посоветуете?
блин, торможу