Бог создал мир за семь дней и до сих пор система работает, не требуя
перезагрузки, потому что у него не было необходимости поддерживать
совместимость с предыдущими версиями.
type
TWinVersion = (wvUnknown, wv95, wv98, wvME, wvNT3, wvNT4, wvW2K, wvXP);
function DetectWinVersion: TWinVersion;
var
OSVersionInfo: TOSVersionInfo;
begin
Result := wvUnknown;
OSVersionInfo.dwOSVersionInfoSize := sizeof(TOSVersionInfo);
if GetVersionEx(OSVersionInfo) thenbegincase OSVersionInfo.DwMajorVersion of
3: Result := wvNT3;
4: case OSVersionInfo.DwMinorVersion of
0: if OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
Result := wvNT4
else
Result := wv95;
10: Result := wv98;
90: Result := wvME;
end;
5: case OSVersionInfo.DwMinorVersion of
0: Result := wvW2K;
1: Result := wvXP;
end;
end;
end;
end;
function DetectWinVersionStr: string;
const
VersStr: array[TWinVersion] ofstring = (
'Unknown',
'Windows 95',
'Windows 98',
'Windows ME',
'Windows NT 3',
'Windows NT 4',
'Windows 2000',
'Windows XP');
begin
Result := VersStr[DetectWinVersion];
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Ver := DetectWinVersion;
Label1.Caption := IntToStr(Ord(DetectWinVersion));
Label2.Caption := DetectWinVersionStr;
end;
Программа на Delphi, которая определяет версию Windows, установленную на системе, и отображает ее в двух метках на форме.
Вот шаг за шагом, как она работает:
Перечисление TWinVersion определяет возможные версии Windows.
Функция DetectWinVersion использует API GetVersionEx для получения информации о операционной системе, включая ее основное и минорное номера версий.
На основе этой информации функция determines, какой версии Windows установлен на системе, и возвращает соответствующее значение из перечисления TWinVersion.
Функция DetectWinVersionStr принимает результат DetectWinVersion и использует его для индексации в массиве строк, содержащем названия каждой версии Windows.
В обработчик события Button1Click программа вызывает DetectWinVersion и затем использует ее результат для установки заголовков двух меток на форме.
Вот некоторые примечания о коде:
API GetVersionEx используется для получения информации о операционной системе. Это API было введено в Windows NT 4.0.
Код не обрабатывает все возможные версии Windows, включая новые, такие как Vista, Seven, Eight, Ten и т.д.
Код использует простой массив строк для хранения названий каждой версии Windows. Это не идеально из-за следующих причин: это не локализовано, не легко поддерживать или обновлять, и не масштабируемо.
Вот некоторые альтернативные решения:
Вместо использования перечисления можно использовать TStringList для хранения названий каждой версии Windows. Это позволит легко добавлять или удалять версии из списка.
Можно использовать более сложный метод определения версии Windows, например, парсинг вывода команды ver или использование API GetWindowsVersion.
Если вам нужно поддерживать несколько языков, можно хранить названия каждой версии Windows в файле ресурсов и использовать функцию LoadString для их получения.
Можно использовать более современные возможности Delphi, такие как generics или interfaces, чтобы сделать код более гибким и поддерживаемым.
Вот обновленная версия кода, которая использует TStringList вместо перечисления:
Обратите внимание, что это только один из возможных способов реализации более гибкого и поддерживаемого кода. Есть много других способов сделать это, в зависимости от вашей конкретной задачи и ограничений.
В статье описывается функция для определения версии операционной системы Windows, которая может быть использована в Delphi и позволяет вывести строковое описание версии ОС на экран.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.