# Grafikkarte ermitteln?



## partitionist (4. Mai 2005)

Wie kann man mit c++ die Grafik. ermitteln über die Registry oder anders?


----------



## Flegmon (4. Mai 2005)

Direct X kann das


----------



## Endurion (4. Mai 2005)

Ohne DirectX gibt's ein EnumDisplayDevices. Bisschen doof: ist erst ab 98 bzw. 2000 drin (95 und NT fallen flach).


----------



## partitionist (4. Mai 2005)

Könnt ihr mir bitte ein Beispiel zeigen aber ohne DirectX


----------



## Endurion (4. Mai 2005)

Hättest du aber auch mal eben selber suchen können, frisch aus der MSDN:

DISPLAY_DEVICE DispDev;

ZeroMemory(&DispDev, sizeof(DispDev));
DispDev.cb = sizeof(DispDev); 

// After the first call to EnumDisplayDevices, 
// DispDev.DeviceString is the adapter name
EnumDisplayDevices( NULL, 0, &DispDev, 0 );


----------



## partitionist (4. Mai 2005)

THX aber ich krieg immer den Fehler:

'EnumDisplayDevices' : nichtdeklarierter Bezeichner


----------



## Endurion (5. Mai 2005)

Hast du <windows.h> includet?
Wenn ja, evtl. musst du WINVER auf 0x0401 setzen (Präprozessor-Einstellungen)


----------



## partitionist (5. Mai 2005)

Hab <windows.h> includiert, aber wo soll ich die Einstellung vornehmen?


----------



## Tobias K. (5. Mai 2005)

moin


Versuch das mal nach den includes

```
#define WINVER 0x0401
```


mfg
umbrasaxum


----------



## partitionist (5. Mai 2005)

Folgende Meldung hab ich:

: warning C4005: 'WINVER' : Makro-Neudefinition

und hier liegt der Fehler:
: error C2065: 'EnumDisplayDevices' : nichtdeklarierter Bezeichner

ohne WINVER müsste es auch gehen und <windows.h> ist schon includiert aber es erkennt die EnumDisplayDevices Funktion nicht


----------



## Tobias K. (5. Mai 2005)

moin


Hab grad nochmal inner MSDN nachgeschaut, finde da auch nichts das die Version angegeben werden muss.
Wichtig ist allerdings das die User32.lib eingebunden ist, das kannst du entweder in den Einstellungen machen oder wenn du einen Windows Compiler hast:

```
#pragma comment(lib, "User32.lib");
```


mfg
umbrasaxum


----------



## partitionist (5. Mai 2005)

```
#include <windows.h>
  
  #pragma comment(lib, "User32.lib")
  
  int main()
  {
  	DISPLAY_DEVICE DispDev;
  
  	ZeroMemory(&DispDev, sizeof(DispDev));
  	DispDev.cb = sizeof(DispDev);
  	EnumDisplayDevices( NULL, 0, &DispDev, 0 );
  
  	return 0;
  }
```
 
  Hab immer noch den Fehler, auch mit oder ohne User32.lib
  Außerdem wird der Fehler vom Compiler und nicht vom Linker hervorgerufen!
  Zur Info hab MSVC6


----------



## Tobias K. (5. Mai 2005)

moin


Hab deinen Codeschnippsel mal getestet.

Bei mir funktioniert er ohne Probleme, ich beutze MSVC 7.
Die Lib musste ich auch nicht eibinden.

Bin da jetzt überfragt.


mfg
umbrasaxum


----------



## partitionist (5. Mai 2005)

Was gibt der Code aus, die Grafikkarte mit namen und anderes zeug?


----------



## Tobias K. (5. Mai 2005)

moin


So wie der Code da steht gibt er natürlich nichts aus, aber man bekommt nen Namen zurück bei mir z.B."NVIDIA GeForce4 Ti 4200 with AGP8X"


mfg
umbrasaxum


----------



## partitionist (5. Mai 2005)

Gut das reicht ja aus, aber warum funktioniert es nicht bei mir nur wegen MSVC6 oder an den Einstellungen?


----------



## partitionist (5. Mai 2005)

kannst du mir dein codeschnipsel zeigen damit der code auch den namen ausgibt


----------



## Tobias K. (5. Mai 2005)

moin


Ich hab den Code aus Beitrag #12 benutzt.

Ausgebeb können solltest du den Namen mit:

```
std::cout<<DispDev.DeviceString;
```


mfg
umbrasaxum


----------



## partitionist (5. Mai 2005)

Ich hab nur Probleme mit EnumDisplayDevices, was soll ich machen?


----------



## Endurion (8. Mai 2005)

Mir fällt ein, dass du eventuell ein neues Plattform SDK benötigen könntest. Das ist nur eine Idee, bin mir nicht sicher, ob das ausreicht.
Das kannst du bei Microsoft kostenlos runterladen, ist allerdings ein dickerer Klotz (120 MB++).


----------



## Tobias K. (8. Mai 2005)

moin


Meinst?!
Eigentlich ist EnumDisplayDevices ein Teil der GDI und die ist mit dabei.


mfg
umbrasaxum


----------



## basd (8. Mai 2005)

Ich glaub man braucht die/das sdk:

NOTE: WINVER has been defined as 0x0500 or greater which enables
Windows NT 5.0 and Windows 98 features. When these headers were released,
Windows NT 5.0 beta 1 and Windows 98 beta 2.1 were the current versions.
For this release when WINVER is defined as 0x0500 or greater, you can only
build beta or test applications.  To build a retail application,
set WINVER to 0x0400 or visit http://www.microsoft.com/msdn/sdk
to see if retail Windows NT 5.0 or Windows 98 headers are available.
See the SDK release notes for more information.


----------



## Endurion (8. Mai 2005)

Argh, dann ists doch WINVER.
Also, WINVER auf 0x0500 setzen, und zwar VOR dem windows.h-Include (Hinterher nützt es nix).
Noch besser, das WINVER in den Projekteigenschaften (Präprozessor) setzen, dann ist es garantiert vor dem Header drin.


----------

