Пятница, 17.05.2024, 11:39
Главная Регистрация RSS
Приветствую Вас, Гость
Главная » Delphi и механизмы Windows » Определение версии Windows и .NET Framework. Часть 1
08:04

Определение версии Windows и .NET Framework. Часть 1

Имеются две функции, позволяющие получить информацию о версии Windows: GetVersion и GetVersionEx. Первая из них объявлена в модуле Windows следующим образом:

function GetVersion: DWORD; stdcall;

Эта функция сейчас считается устаревшей, и в новых приложениях рекомендуется применять GetVersionEx.

Но я, все-таки, рассмотрю коротко и функцию GetVersion, так как есть случаи, когда она удобнее. Функция возвращает значение, содержащее в младшем слове номер версии Windows, а в старшем — информацию о платформе операционной системы. Младший байт младшего слова содержит основной номер Windows в шестнадцатеричном виде, а его старший байт (в версиях, кроме Windows 95) содержит дополнительный номер (модификацию) тоже в шестнадцатеричном виде. Таким образом, при распознавании версий можно руководствоваться следующей таблицей:

ПлатформаСтарший битМладший байт (основной номер версии)
Windows NT0
3, или 4, или 5
Windows 951
4
Win32s с Windows 3.11
3

Следующий пример демонстрирует дешифрацию этой информации:

function GetWindowsVersion: string; 
var dwVersion: DWord;
dwMajorVersion,dwMinorVersion, dwBuild: Word;
S: string;
begin
dwVersion := GetVersion;
dwMajorVersion := Byte(Word(dwVersion));
dwMinorVersion := HiByte(Word(dwVersion));
if (dwVersion < $80000000)
then begin
case dwMajorVersion of
4: S := 'Windows NT';
5: if dwMinorVersion = 0
then S := 'Windows 2000'
else if dwMinorVersion = 1
then S := 'Windows XP1'
else S := 'Неизвестная версия Windows NT';
else S := 'Неизвестная версия Windows NT';
end;
dwBuild := HiWord(dwVersion);
end
else if (dwMajorVersion < 4)
then begin
S := 'Windows 3.1';
dwBuild := HiWord(dwVersion) and $7FFFFFFF;
end
else begin
if dwMajorVersion = 4
then
case dwMinorVersion of
0: S := 'Windows 95'
10: S := 'Windows 98'
90: S := 'Windows ME'
else S := 'Неизвестная версия Windows 9x';
end;
dwBuild := 0;
end;
if dwBuild > 0
then S := S + ', модификация ' + IntToStr(dwBuild) ;
Result := S;
end;
procedure TForml.ButtonlClick(Sender: TObject);
begin
Memol.Text := GetWindowsVersion;
end;

Функция GetWindowsVersion формирует строку с обозначением версии Windows, а обработчик щелчка на кнопке Buttonl заносит результат в окно Memo1.

Функция GetVersion удобна, если не требуется информация о версиях, а надо только определить, относится ли Windows к группе NT (в эту группу входят и Windows 2000\XP), или к группе 9.x. Для этого достаточно выполнить оператор:

if (GetVersion < $80000000)
then ...

Такую проверку удобно оформить в виде функции и включить в свою библиотеку:

function IsNT: boolean;
begin
Result := GetVersion < $80000000;
end;
Категория: Delphi и механизмы Windows | Просмотров: 1272 | Добавил: PeKpyT | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]