Пример использования:

Code:

// Закодированные MakeVersion версии можно просто сравнивать

if GetDLLVersion('SHELL32.DLL') > MakeVersion(5, 0) then

...

 // Вот так можно вывести версию DLL

 var

V: Integer;

begin

V := GetDLLVersion('SHLDOC32.DLL');

ShowMessage(IntToStr(HIWORD(V)) + '.' + IntToStr(LOWORD(V)));

end;

 

 

Сам код:

Code:

{ **** UBPFD *********** ****

>> Определение версии системных DLL

 Функция предназначена для определение версии системных DLL. Кодирование версии осуществляется вспомогательной функцией MakeVersion (см. код).

Зависимости: Windows

Автор:       Almaz, Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра., Санкт-Петербург

Copyright:   Собственное написание Almaz

********************************************** }

 

function MakeVersion(Major, Minor: Word): Integer; // Функция кодирование версии

begin

Result := MAKELONG(Minor, Major);

end;

 

function GetDllVersion(FileName: PChar): Integer;

type

TDllVersionInfo = packed record

   cbSize: DWORD;

   dwMajorVersion: DWORD;

   dwMinorVersion: DWORD;

   dwBuildNumber: DWORD;

   dwPlatformID: DWORD;

end;

PDllVersionInfo = ^TDllVersionInfo;

 

var

Lib: THandle;

DllGetVersion: function (Info: PDllVersionInfo): HRESULT; stdcall;

Info: TDllVersionInfo;

WasLoaded: Boolean;

begin

Result := 0;

try

   // Получение ссылки на DLL, если она уже загружена

   Lib := GetModuleHandle(FileName);

   if Lib = 0 then

   begin

     // Загрузка DLL, если она еще не загружена

     Lib := LoadLibrary('SHELL32.DLL');

     WasLoaded := True;

   end else WasLoaded := False;

   if Lib <> 0 then

   try

     // Получение адреса функции DllGetVersion

     DllGetVersion := GetProcAddress(Lib, 'DllGetVersion');

     if Assigned(DllGetVersion) then

     begin

       // Подготовка структуры для функции

       ZeroMemory(@Info, SizeOf(Info));

       Info.cbSize := SizeOf(Info);

       // Вызов функции DllGetVersion

       if DllGetVersion(@Info) = NOERROR then

         Result := MakeVersion(Info.dwMajorVersion, Info.dwMinorVersion);

     end;

   finally

     // Если DLL была загружена этой функцией - то выгружаем

     if WasLoaded then FreeLibrary(Lib);

   end;

except

end;

end;

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить