PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Grafikkarten-Info


LX
19.04.2002, 14:33
Servus!
Weiß jemand, wie man möglichst einfach Informationen über die Grafikkarte(n), die in einem System installiert sind ausliest (primär erstmal Name und Grafik-Speicher), möglichst ohne erst 5 Seiten lang Direct3D oder so zu initialisieren...
Bin für jede Hilfe dankbar... :)

LX


Felix Kaiser
19.04.2002, 18:23
Viel ist ja nicht gerade zugänglich zwecks Informationen. Kartenname suche ich in der Registry, Größe des Video RAMs entnehme ich DirectDraw 1.0. Sowie die aktuelle Bildwiederholfrequenz. Sonst ist ja nicht viel rauszuholen. Wenn du willst such ich dir mal den Code raus ...

Schaf
19.04.2002, 20:03
hab mal was gelesen, mit dem man das DIREKT aus dem graka-bios rausholen kann. :)) werd ich dir mal raussuchen, wenn ich genug zeit hab. da stehen, soweit ich mich erinnern kann hersteller, modell, bios-rev. und andere nette sachen drin.

LX
19.04.2002, 20:14
Als erstes mal danke!
Das mit der Registry hab ich selber, allerdings hatte irgendjemand mal gemeint, das würde z.B. auf Notebooks nicht funktionieren, obwohl ich mir nicht vorstellen kann, warum.
Für den DD-Code wär ich sehr dankbar...
Grafikkarten-BIOS?? Klingt interessant, aber: Wie soll das funktionieren??

Felix Kaiser
19.04.2002, 21:29
Du hast keinen Zugriff auf irgendwelche PCI Geräte-BIOS bzw. direkte VESA Informationen :P

Registry funzt 1A. Die einzigen Abweichungen liegen bei den Platformen. Der Parser für Win2k z.B. schaut anders aus als der für Win9x.

Übrigens, hat man nen Plug´n´Play Monitor, kann man aus der Registry die VBE/DDC Daten fischen und verwenden. VBE/DDC = VESA BIOS Extension for Display Data Channel. Die ließt Windows beim Booten aus. Dort kannste z.B. das Monitormodell identifizieren, Maße der Bildröhre, Bildfrequenzen, Baujahr und so Kram.

Jedoch für Graka bleibt unter Win NUR die Registry ...

LX
19.04.2002, 22:16
Also für Win2k müsste das dann ja in HKEY_LOCAL_MACHINE bei HARDWARE\DEVICEMAP\Video der Eintrag \Device\Video0 sein, bzw da steht dann, wo genau die tatsächlichen Infos stehen.
Wo sind die denn bei Win9x?? Ich hab kein älteres System mehr mit dem ich das herausfinden könnte...

Felix Kaiser
20.04.2002, 11:17
Ich auch nicht :rolleyes:

Bei NT Systemen suche ich in ´HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI´ alle Unterschlüssel durch, nach Geräten der Klasse ´Display´, die gerade verwendet werden (also auch gültige Konfiguration haben). Für Windows9x/ME kannst du mal bei ´HKEY_LOCAL_MACHINE\Enum\PCI´ suchen. Parameter und sowas sollten ein wenig kompatibel sein...

LX
20.04.2002, 11:42
Gibt´s denn ´ne Funktion, die mir irgendwie die Unterschlüssel zurückliefert oder wie kommst du an die Namen der Unterschlüssel?? ;(

Edit: Ignoriert es ich hab´s selber gefunden 8)
TRegistry.GetKeyNames();
Trotzdem danke.

Felix Kaiser
20.04.2002, 15:21
Los, na dann mach mal :)
Wie gesagt, für Video RAM bräuchtest du DirectDraw1.0, das steht da nirgends. Ist aber recht einfach zu benutzen.

Schaf
20.04.2002, 22:51
@lx: dat funzt so: das graka-bios belegt ja schließlich, wie alles, einen bestimmten speicherbereich. und da hersteller usw. immer denselben speicherbereich belegen, kannst du da einfach so reinspazieren und dir das zeux da rausziehen. musst nur irgendwie nen pointer auf diesem speicherbereich machen. ich such nochmal, keine angst :D

Felix Kaiser
21.04.2002, 00:29
Man du Nudel, sämtliche PCI BIOS liegen auf einem zu hohen Level, auf was dir kein Windows Kernel Zugriff gestattet. Du kommst an diese Informationen NICHT ran! Außer du bist unter DOS. Aber wir sind hier in Windows. Bitte lass es weiteres über das Graka BIOS zu posten, da es hier niemanden nützt. Nimm zur Kenntnis dass ich weitere Beiträge in denen es um das Graka BIOS *narf* geht löschen werde.

LX: Ich habe von irgendwo her, weiß jetzt nicht mehr ob von Borland oder einer Seite, die ich aus dem Google habe, mir mal vor einiger Zeit eine DirectX 8 Unit-Sammlung für Delphi gezogen. (Oder es war von der Borlandseite darauf verlinkt gewesen) Ziehs dir mal. Ich such dir morgen mal den Code raus, wie du mit nur wenigen Zeilen die exakte Größe in Megabytes des VideoRAMs mit Hilfe von DirectDraw1.0 ermitteln und berechnen kannst.

Wenn du des Package nicht findest, schreib mir ne Mail und ich schicks dir. Auf jeden Fall gibt es keine exaktere Möglichkeit als diese. Und DirectDraw1.0 als solches Interface gibt es seit vielen DX Versionen bereits.

Felix Kaiser
23.04.2002, 14:13
Sry, hatte bissl wenig Zeit, aber hier der Code:


function VideoRAMSize: string;
var
dd: IDirectDraw;
res: HResult;
caps1,caps2: PDDCaps;
total: Extended;
begin
VideoRAMSize:= ´N/A´;
res:= DirectDrawCreate(nil,dd,nil);
if res = DD_OK then begin
New(caps1);
New(caps2);
caps1^.dwSize:= sizeof(caps1^);
caps2^.dwSize:= sizeof(caps2^);
if dd.GetCaps(caps1,caps2) = DD_OK then begin
total:= caps1^.dwVidMemTotal/(1024*1024);
if total <= 0.5 then total:= 0.5
else if total <= 1.0 then total:= 1.0
else if total <= 2.0 then total:= 2.0
else if total <= 4.0 then total:= 4.0
else if total <= 8.0 then total:= 8.0
else if total <= 12.0 then total:= 12.0
else if total <= 16.0 then total:= 16.0
else if total <= 32.0 then total:= 32.0
else if total <= 64.0 then total:= 64.0
else if total <= 128.0 then total:= 128.0
else if total <= 192.0 then total:= 192.0
else if total <= 256.0 then total:= 256.0;
VideoRAMSize:= Format(&acute;%.1f MB&acute;,[total]);
end;
Dispose(caps1);
Dispose(caps2);
end;
end;


Brauchst halt die DirectDraw Unit aus dem DirectX Delphi Package. Aber dann hauts hin! Zumal Bildwiederholrate auch über dieses hier verwendete Objekt zu ermitteln geht.

xOOn
24.04.2002, 08:35
@D3DSH33P
das mit dem pointer auf das graka-bios funkt nur unter dos und da wuenscj ich dir viel spass beim suchen nach dem richtigen eintrag!

Mackhack
26.04.2002, 18:22
Hi,

also ich will jetzt net nochmehr Unruhe stiften aber man kann doch mit dem Debuger von DOs (und sicher auch mit anderen) gucken was für eine Grafikkarte drin ist...

Einfach in die DOS-Box gehen und dann mit Debug und dem Befehl:
-d 000:0100 nachgucken... Evtl. noch 1 oder 2 mal D und Enter drücken...

Vielleicht hilft das ja weiter...

Felix Kaiser
26.04.2002, 20:39
Das ist wie du so schön sagst ja auch DOS *narf*. DOS Box = 16 Bit RealMode Task im V86 in dem Windows arbeitet. Da ist in der Regel der Speicher bei C000:0000 auf das Video-BIOS gemappt. Dummerweise NUR in der Dos Box und dummerweise nur bei älteren Windows Versionen. Windows 2000, XP und .NET benutzen einen Dos Emulator, keinen Backswitcher mehr auf das Ur-DOS, so wie bein Windows95/98/ME.

Fazit: Graka BIOS unter Windows nur in der DOS Box von Windows95/98/ME. Das wars. Also schluss damit :mauer:

xOOn
26.04.2002, 20:49
@Mackhack
cool das funkt sogar, mein altes dos findet sogar den namen

hab das gar nicht gewusst! :] :]


aber gebrauchen kann man es nicht mehr
Win9x ist bald tod WURDE AUCH ZEIT wie ich finde

Felix Kaiser
26.04.2002, 20:55
Jep, die Windows9x Serien hatten immer diese komische Eigenschaft lustige Fehler zu produzieren und nicht ganz richtig zu funktionieren und das von selber :D

Aber in Windows scheint es doch noch versteckte Funktionen zu geben, da bin ich mir sicher. Beim Booten ermitteln die Treiber von Windows reintheopraktisch alle verfügbaren Systeminformationen. Irgendwo muss somit auch näheres zur Grafikkarte vermerkt sein, ich weiß nur nicht wo genau :( Aber wenn man so Tools wie DirectX Diagnose startet, der holt viele Infos NICHT aus DirectX Treibern und Modulen, sondern von anderswo her, womöglich über direkten Zugriff auf irgendwelche DLLs oder Treibererweiterungen? Vielleicht spuckt die MSDN irgendwo noch was aus.

xOOn
26.04.2002, 21:52
MSDN wird dursch nen M$ filter geschickt, da steht nur das was die entwickler wissen sollen :D :D :D