Пример использования:
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; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!