|
|
|
| Получение 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 ) Комментариев |
|
|
|
|