home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2001 September
/
Chip_2001-09_cd1.bin
/
zkuste
/
delphi
/
kompon
/
d2345
/
MSYSINFO.ZIP
/
Source
/
MSI_DirectX.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2001-05-21
|
5KB
|
167 lines
{*******************************************************}
{ }
{ MiTeC System Information Component }
{ DirectX Detection Part }
{ version 5.4 for Delphi 3,4,5 }
{ }
{ Copyright ⌐ 1997,2001 Michal Mutl }
{ }
{*******************************************************}
{$INCLUDE MITEC_DEF.INC}
unit MSI_DirectX;
interface
uses
SysUtils, Windows, Classes;
type
TDirectX = class(TPersistent)
private
FVersion: string;
FDirect3D: TStrings;
FDirectPlay: TStrings;
FDirectMusic: TStrings;
public
constructor Create;
destructor Destroy; override;
procedure GetInfo;
procedure Report(var sl :TStringList);
published
property Version :string read FVersion write FVersion stored false;
property Direct3D :TStrings read FDirect3D write FDirect3D stored false;
property DirectPlay :TStrings read FDirectPlay write FDirectPlay stored false;
property DirectMusic :TStrings read FDirectMusic write FDirectMusic stored false;
end;
implementation
uses
Registry, MiTeC_Routines;
{ TDirectX }
constructor TDirectX.Create;
begin
inherited;
FDirect3D:=TStringlist.Create;
FDirectPlay:=TStringlist.Create;
FDirectMusic:=TStringlist.Create;
end;
destructor TDirectX.Destroy;
begin
FDirect3D.Free;
FDirectPlay.Free;
FDirectMusic.Free;
inherited;
end;
procedure TDirectX.GetInfo;
var
bdata :pchar;
sl :tstringlist;
i :integer;
const
rkDirectX = {HKEY_LOCAL_MACHINE\}'SOFTWARE\Microsoft\DirectX';
rvDXVersionNT = 'InstalledVersion';
rvDXVersion95 = 'Version';
rkDirect3D = {HKEY_LOCAL_MACHINE\}'SOFTWARE\Microsoft\Direct3D\Drivers';
rkDirectPlay = {HKEY_LOCAL_MACHINE\}'SOFTWARE\Microsoft\DirectPlay\Services';
rkDirectMusic = {HKEY_LOCAL_MACHINE\}'SOFTWARE\Microsoft\DirectMusic\SoftwareSynths';
rvDesc = 'Description';
begin
try
with TRegistry.Create do begin
rootkey:=HKEY_LOCAL_MACHINE;
if OpenKey(rkDirectX,false) then begin
bdata:=stralloc(255);
if ValueExists(rvDXVersion95) then
FVersion:=ReadString(rvDXVersion95);
if FVersion='' then
if ValueExists(rvDXVersionNT) then
try
readbinarydata(rvDXVersionNT,bdata^,4);
FVersion:=inttostr(lo(integer(bdata^)))+'.'+inttostr(hi(integer(bdata^)));
except
{$IFDEF D4PLUS}
try
readbinarydata(rvDXVersionNT,bdata^,8);
FVersion:=inttostr(lo(integer(bdata^)))+'.'+inttostr(hi(integer(bdata^)));
except
end;
{$ENDIF}
end;
closekey;
strdispose(bdata);
end;
FDirect3D.Clear;
FDirectPlay.Clear;
FDirectMusic.Clear;
sl:=tstringlist.create;
if OpenKey(rkDirect3D,false) then begin
getkeynames(sl);
closekey;
for i:=0 to sl.count-1 do
if OpenKey(rkDirect3D+'\'+sl[i],false) then begin
if ValueExists(rvDesc) then
FDirect3D.Add(ReadString(rvDesc));
closekey;
end;
end;
if OpenKey(rkDirectPlay,false) then begin
getkeynames(sl);
closekey;
for i:=0 to sl.count-1 do
if OpenKey(rkDirectPlay+'\'+sl[i],false) then begin
if ValueExists(rvDesc) then
FDirectPlay.Add(ReadString(rvDesc));
closekey;
end;
end;
if OpenKey(rkDirectMusic,false) then begin
getkeynames(sl);
closekey;
for i:=0 to sl.count-1 do
if OpenKey(rkDirectMusic+'\'+sl[i],false) then begin
if ValueExists(rvDesc) then
FDirectMusic.Add(ReadString(rvDesc));
closekey;
end;
end;
sl.free;
free;
end;
except
on e:Exception do begin
MessageBox(0,PChar(e.message),'TDirectX.GetInfo',MB_OK or MB_ICONERROR);
end;
end;
end;
procedure TDirectX.Report(var sl: TStringList);
begin
with sl do begin
Add('[DirectX]');
if Version<>'' then begin
Add(Format('Version=%s',[Version]));
Add('[Direct3D]');
StringsToRep(Direct3D,'Count','Device',sl);
Add('[DirectPlay]');
StringsToRep(DirectPlay,'Count','Device',sl);
Add('[DirectMusic]');
StringsToRep(DirectMusic,'Count','Device',sl);
end;
end;
end;
end.