Для этого необходимо вызвать несколько
функций API. В приведеннном ниже примере проверяется версия shell32.dll.
Функция возвращает значение True - если версия DLL больше или равна 4.71
function TForm1.CheckShell32Version: Boolean;
procedure
GetFileVersion(FileName: string; var Major1, Major2,
Minor1, Minor2:
Integer);
{ Helper function
to get the actual file version information }
var
Info: Pointer;
InfoSize: DWORD;
FileInfo:
PVSFixedFileInfo;
FileInfoSize:
DWORD;
Tmp: DWORD;
begin
// Get the size
of the FileVersionInformatioin
InfoSize :=
GetFileVersionInfoSize(PChar(FileName), Tmp);
// If InfoSize =
0, then the file may not exist, or
// it may not
have file version information in it.
if InfoSize = 0
then
raise
Exception.Create('Can''t get file version information for '
+ FileName);
// Allocate
memory for the file version information
GetMem(Info, InfoSize);
try
// Get the
information
GetFileVersionInfo(PChar(FileName),
0, InfoSize, Info);
// Query the
information for the version
VerQueryValue(Info,
'\', Pointer(FileInfo), FileInfoSize);
// Now fill in
the version information
Major1 :=
FileInfo.dwFileVersionMS shr 16;
Major2 :=
FileInfo.dwFileVersionMS and $FFFF;
Minor1 := FileInfo.dwFileVersionLS shr 16;
Minor2 :=
FileInfo.dwFileVersionLS and $FFFF;
finally
FreeMem(Info,
FileInfoSize);
end;
end;
var
tmpBuffer: PChar;
Shell32Path:
string;
VersionMajor:
Integer;
VersionMinor:
Integer;
Blank: Integer;
begin
tmpBuffer :=
AllocMem(MAX_PATH);
// Get the
shell32.dll path
try
GetSystemDirectory(tmpBuffer, MAX_PATH);
Shell32Path :=
tmpBuffer + '\shell32.dll';
finally
FreeMem(tmpBuffer);
end;
// Check to see if
it exists
if
FileExists(Shell32Path) then
begin
// Get the file
version
GetFileVersion(Shell32Path,
VersionMajor, VersionMinor, Blank, Blank);
// Do something,
such as require a certain version
// (such as
greater than 4.71)
if (VersionMajor
>= 4) and (VersionMinor >= 71) then
Result := True
else
Result :=
False;
end
else
Result := False;
end;