>> Определение версии
системных DLL
Функция предназначена для
определение версии системных DLL. Кодирование версии осуществляется
вспомогательной функцией MakeVersion (см. код).
Зависимости: Windows
Автор:
Almaz, az_spb@mail.ru, Санкт-Петербург
Copyright:
Собственное написание Almaz
Дата:
12 мая 2002 г.
**********************************************
}
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;
|