Entwickler-Ecke

Windows API - DirectX Ermittel


Kurzer_18 - So 19.08.07 13:36
Titel: DirectX Ermittel
Hallo.... hat von euch jemand eine ahnung.. bzw eine lösung gefunden wie ich Die aktuelle DirectX version ermitteln kann? d.h auch unter Windows Vista (DirectX 10).

Niergends findet man was dazu und da dacht ich mir poste ich es doch einfach mal hier rein :-) währe schon ganz guddi wenn da einer ne idee hat ober vielleicht weis wie des funktioniert.

DANKE!!!!


Calculon - So 19.08.07 14:25

Kurzer_18 hat folgendes geschrieben:
[..] Niergends findet man was dazu [..]

Kann ich nicht bestätigen. Google fand sofort:

http://forum.dsdt.info/viewtopic.php?t=22120&view=previous

Gruß

Calculon
--


Kurzer_18 - So 19.08.07 14:32


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
function GetDirectXVersion(var major, minor: word): boolean;
var Reg: TRegistry;
    str: string;
    res: boolean;
    DXVersion: record
                 Major: Longword;
                 Minor: Longword;
               end;

begin
  str:='';
  res:=false;
  major:=0; minor:=0;
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('\Software\Microsoft\DirectX', False) then
    begin
      res:=true;
      Reg.ReadBinaryData('InstalledVersion', DXVersion, SizeOf(DXVersion));
    end;
  finally
    Reg.CloseKey;
    Reg.Free;
  end;

  if res then
  begin
    Major:=HiByte(hiWord(DXVersion.Major));
    Minor:=HiByte(hiword(DXVersion.Minor));
  end;

  Result := res;
end;


und wie führe ich dies nun aus? weil er meint immer was mit:

[Fehler] Unit1.pas(64): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen


DAMIT ERMITTLE ich auch wieder nur DX9 unter Vista.. es geht ja aber darum das DX10 ausgegeben wird...

sie z.b. CPU-Z unter about.... da steht unten de windows version und die RICHTIGE DX version


Calculon - So 19.08.07 14:39

Zitat:
und wie führe ich dies nun aus?

So:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Button1Click(Sender: TObject);
var Major, Minor: Byte;
begin
  GetDirectXVersion(Major, Minor);
  ShowMessage('Version: ' + IntToStr(major) + '.' + IntToStr(minor));
end;


[edit]
Zitat:
DAMIT ERMITTLE ich auch wieder nur DX9 unter Vista..

Was ich etwas komisch finde, da die Werte ja aus der Registry gelesen werden. Wieso stehen da falsche oder nicht aktuelle Informationen drin? Wegen Abwärtskompatibilität?
[/edit]

Gruß

Calculon
--


Kurzer_18 - So 19.08.07 14:49

ok danke dir....

aber wie ich bereits erwähnte ermittelt er dabei auhc nur DX9 und nicht ds wirklich DX was bei vista dabei ist .. also KEIN DX 10

Zitat:
Was ich etwas komisch finde, da die Werte ja aus der Registry gelesen werden. Wieso stehen da falsche oder nicht aktuelle Informationen drin? Wegen Abwärtskompatibilität?


das ist eine sehr gute frage die werte von DX 10 stehen leider nicht mehr darin weis auch ne warum die müsen irgendwie anders abgefragt werden...und ich habe jetzt inzwischen überall und niegends geschaut aber ich finde nix und wenn ich was finde dann ist es immer das selbe über die registry.. aber Vista (DirectX 10) steht nunmal nicht mehr in der Registry nur sie simpulierte bzw. Abwärtskompatibilität DX9.. aber keine 10 mehr.... aber das ist genau das was ich ja will.

D.h ich bin jeden über vorschläge dankbar.. solange sie sich nicht auf die registry (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectX) beziehen.... denn da steht DEFINITIV nicht drinne...!!!


TGLDX - So 19.08.07 22:14

Man könnte ja prüfen, ob sich in Windows\System32\ die entsprechenden dlls befinden (d3d8/9/10.dll)


Kurzer_18 - Mo 20.08.07 20:18

@TGLDX

Könnte man aber danke DirectX installer installiert er auf Windows XP auch die DX10 files... und das windows XP kein DX10 hat weis und sollte inzwischen jeder wissen... also bringt das auhc nicht gerade Sehr viel...

es muss auch eine andere möglichkeit geben siehe CPU-Z... die haben es korrekt.. aber im falle von delphi scheint es ja nicht zu gehen.. :-(


TGLDX - Mo 20.08.07 20:45

GetDXVerUnit.pas [http://www.google.com/codesearch?hl=de&q=+lang:%22pascal%22+GetDXVersion+show:c_vYVtV75ec:QkXvv1hxZUE:JNpq7SnctgY&sa=N&cd=2&ct=rc&cs_p=http://home.snafu.de/mgrafe/Programme/Gplanv070_source.zip&cs_f=GetDXVerUnit.pas#a0]
dxdiag.pas [http://www.google.com/codesearch?hl=de&q=show:b11ntlvxx9Y:QkXvv1hxZUE:nhDC5vbPNUo&sa=N&ct=rd&cs_p=http://home.snafu.de/mgrafe/Programme/Gplanv070_source.zip&cs_f=/DxDiag.pas&start=1]

Das ist die Delphi-Version der Funktion GetDXVersion aus dem DirectX-SDK,welche die Version über dxdiag.exe ausliest.


Kurzer_18 - Mo 20.08.07 23:08

naja wie ich es mir gedacht habe gilt auch nur für DX 9... oder sagen wir mal bis Max DX9... :-8


TGLDX - Mo 20.08.07 23:35

Du hast es scheinbar nicht ausprobiert; man übergibt der Funktion einen String-Parameter, welcher die Version danach im Klartext enthält.
(Ich habe mit Vista als Ergebnis "10.0" erhalten)


Kurzer_18 - Mo 20.08.07 23:54

hmm dann schreieb einfach mal wie du das gemacht hast? damit ich es nachvollziehen kann vielleicht habe ich ja auch einfach nur was falsch gemacht.. kannst es ja gerne posten würde mich sehr freuen wenn es doch funktionieren sollte... also Unit kannst du ruhig posten.. danke dir


TGLDX - Di 21.08.07 00:07


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
// uses GetDXVerUnit nicht vergessen!

procedure ShowDXVersion;
var C: Cardinal; // Nur wegen dem out-Parameter
    dxversion: String;
begin
 GetDXVersion(C,dxversion);
 Application.MessageBox(PChar(dxversion),'DX-Version');
end;


Units sind oben verlinkt (einfach in zwei *.pas Dateien kopieren).


Kurzer_18 - Di 21.08.07 00:25

Danke dir.... also teste ich es nochmal... und dann mal schauen.. aber ich glaube das habe ich eh vergessen ;-D aber danke dir trotzdem