хостинг и регистрация доменов
 
Навигация
Delphi
Sail Engine
Полезные ресурсы

iSADA team  Pascal Games
Получение DirectX версии по номеру билда
Не редко возникает необходимость определить номер версии DirectX. Но как это сделать? Можно воспользоваться стандартным инструментарием Windows, выполнив команду dxdiag, получаем подробную информацию. Обращаем внимание на номер версии:


Всё правильно, она состоит из сокращённого названия и номера билда. Определили версию, всё вроде бы замечательно, но возникает вопрос: а как получить эту информацию при помощи Delphi? А оказывается очень просто.

Самое простое решение, которое приходит на ум, использовать реестр Windows. В реестре номер версии находится по адресу: HKEY_LOCALE_MACHINE\Software\Microsoft\DirectX. Запустим regedit, нас интересует ключ Version, находим его.


Значением ключа как раз и является номер версии DirectX, точнее номером его билда. Теперь, зная номер билда, несложно вычислить название версии. В этом нам поможет, хронологическая таблица версий DirectX:

Версия DirectX Логотип Номер версии Операционная система Дата релиза
DirectX 1.0 4.02.0095 Windows 95a 30 сентября 1995
DirectX 2.0 / 2.0a   4.03.00.1096 Windows 95 OSR2 и Windows NT младше 4.0 5 июня 1996
DirectX 3.0 / 3.0a   4.04.0068 / 69 Windows NT 4.0 SP3 ???, 1996
DirectX 4.0   Не выпущен    
DirectX 5.0   4.05.00.0155 (RC55) Доступен как бета для Windows NT 5.0 16 июля 1997
DirectX 5.0   4.05.01.1721 / 1998 Windows 98 5 мая 1998
DirectX 6.0   4.06.00.0318 (RC3) Windows 98 SE ???, 1998
DirectX 6.1   4.06.02.0436 (RC0) Windows 95/98/98SE 7 августа 1998
DirectX 7.0 4.07.00.0700 (RC1) Windows 2000 и Windows ME 22 сентября 1998
DirectX 7.0a   4.07.00.0716 (RC1) Windows 95/98/98SE/2000 ???, 1999
DirectX 8.0 4.08.00.0400 (RC10) Windows 95/98/98SE/ME/2000 30 сентября 2000
DirectX 8.0a   4.08.00.0400 (RC14)   ???, 2000
DirectX 8.1   4.08.01.0810
4.08.01.0881 (RC7)
Windows XP 12 ноября 2001
DirectX 8.1b   4.08.01.0901   ???, 2002
DirectX 9.0 4.09.0000.0900 Windows Server 2003 24 декабря 2002
DirectX 9.0a   4.09.0000.0901   26 марта 2003
DirectX 9.0b   4.09.0000.0902 (RC2)   13 августа 2003
DirectX 9.0c   4.09.0000.0904 (RC0) Windows XP SP2 9 августа 2004
DirectX 9.0c   4.09.0000.0904 Xbox 360 и др. ОС Windows 9 декабря 2005
DirectX 9.0L   4.09.0000.0905 (?) Дополнительные интерфейсы IDirect3D9Ex и IDirect3DDevice9Ex  
DirectX 10 6.0.6000.16386 Windows XP/Vista 10 ноября 2006
DirectX 10.1   6.00.6001.18000 Service Pack 1 для Windows Vista, Windows Server 2008 4 февраля 2008
DirectX 11.1   ? Service Pack 2 для Windows Vista, Windows 7 4 февраля 2009

Ну вот, когда данные по версиям нам известны, можно смело запускать Delph`у и писать функцию декодирования:

Код на Delphi:
001.
002.
003.
004.
005.
006.
007.
008.
009.
010.
011.
012.
013.
014.
015.
016.
017.
018.
019.
020.
021.
022.
023.
024.
025.
026.
027.
028.
029.
030.
031.
032.
033.
034.
035.
036.
037.
038.
039.
040.
041.
042.
043.
044.
045.
046.
047.
048.
049.
050.
051.
052.
053.
054.
055.
056.
057.
058.
059.
060.
061.
062.
063.
064.
065.
066.
067.
068.
069.
070.
071.
uses
  Registry;
...
 
function GetDirectXVersion: String;
type
  TDXVer = record
    Version : Byte;
    Major   : Word;
    Minor   : Word;
    SubMinor: Word;
  end;
 
var
  Reg  : TRegistry; // класс для работы с реестром
  Str  : String;    // временная переменная
  DXVer: TDXVer;    // структура
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('\Software\Microsoft\DirectX', False) then
    begin
      Result := Reg.ReadString('Version');                       // читаем из реестра номер билда
      Str := Result;
      DXVer.Version := StrToInt(Copy(Result, 1, Pos('.', Result)-1));// заполняем нашу структуру, 
      Delete(Result, 1, Pos('.', Result));                           // разбиваем на версии по  
      DXVer.Major := StrToInt(Copy(Result, 1, Pos('.', Result)-1));  // степени значимости
      Delete(Result, 1, Pos('.', Result));                           // (старшая, младшая)
      DXVer.Minor := StrToInt(Copy(Result, 1, Pos('.', Result)-1));
      Delete(Result, 1, Pos('.', Result));
      DXVer.SubMinor := StrToInt(Result);
      Result := '?';
      case DXVer.Version of                                          // анализируем, сравнивая с 
        4: case DXVer.Major of                                       // хронологической таблицей
             5: if DXVer.Minor = 0 then                               
                  Result := '5.0 for Windows NT 5.0' else
                  Result := '5.0 for Windows 98';
             6: if DXVer.Minor = 0 then
                  Result := '6.0' else
                  Result := '6.1';
             7: if DXVer.SubMinor = 700 then
                  Result := '7.0' else
                  Result := '7.0a';
             8: case DXVer.Minor of
                  0: Result := '8.0';
                  1: if DXVer.SubMinor = 901 then
                       Result := '8.1b' else
                       Result := '8.1 for Windows XP';
                end;
             9: case DXVer.SubMinor of
                  900: Result := '9.0';
                  901: Result := '9.0a';
                  902: Result := '9.0b';
                  904: Result := '9.0c';
                  905: Result := '9.0L for Windows Vista';
                end;
            10: Result := '10.' + IntToStr(DXVer.Minor);
           end;
        6: case DXVer.Minor of
             6000: Result := '10.0';
             6001: Result := '10.1';
           end;
      end;
      Result := Result + ' ('+ Str + ')'; // возвращаем название версии + номер билда
    end;
  finally
    Reg.CloseKey;
    Reg.Free;
  end;
end;

На этом я заканчиваю свою статью, успешного кодинга!

Автор статьи: Kordal Добавил: Kordal, во Вторник 9 Июня 2009 ( 0 ) Комментариев


Design by Kornet Network