Советы по Delphi

       

Определение версии Windows


Посмотрите в электронной справке API и модуле WINPROCS описание и декларацию функции GetVersion: LongInt;

Функция GetVersion возвращает текущие номера версий операционных систем Windows и MS-DOS.

Примечание: в оригинальной документации по API-функциям есть ошибка: возвращаются обе версии Win - общая и сборки (major/minor)!

Результаты использования функции:

Windows 3.1 возвращает 3.1, WIN95 возвращает 3.95

Примечание Под windows 95 и выше используйте функцию GetVersionEx

Дополнение

К большому сожалению с помощью функции GetVersionEx нельзя определить "точно" версию Windows. Можно у знать номер, описание платформы (Win32&95, Win32, nonWin32), но назвать ее сложно. Возвращаемый результат имеет такую структуру:

  • dwOSVersionInfoSize
  • dwMajorVersion
  • dwMinorVersion
  • dwBuildNumber
  • dwPlatformId
  • szCSDVersion
Для людей, которым нужно просто "обозвать" Windows типа "Windows95" или "Windows98" советую читать это из глубин реестра или воспользоваться следующей функцией:

function GetWinVersion:String;
{не забудьте подключить модуль Registry}
var
Reg:TRegIniFile; {ипользуем TRegIniFile, а не TRegistry для совместимости с Win 3.1 и ниже}HK: HKEY; { type HKEY = Integer }begin
// Интересующие нас данные лежат в LOCAL_MACHINE...
RegCreateKey(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows',HK);Reg:=TRegIniFile.Create('');Reg.RootKey:=HK;// Читаем версию Windows...
GetWinVersion:=Reg.ReadString('CurrentVersion','Version','');Reg.Free;end;

Igor Popov. E-mail to: .

Дополнение

предостерегает:

Если у меня NT, то ключа
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Version
нет по определению, есть например
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion

Вопрос об удобной функции для определения версии Windows остается открытым... [000278]



Содержание раздела