C# Kann Grafikkarte nicht auslesen.

eightcore

Lt. Commander
🎅Rätsel-Elite ’24
Registriert
Juli 2008
Beiträge
1.676
Guten Tag!


Ich möchte so den Namen der Grafikkarte auslesen.


public string GPUName()
{
RegistryKey RegKey = Registry.LocalMachine;
RegKey = RegKey.OpenSubKey("SOFTWARE\\Microsoft\\Windows
NT\\CurrentVersion\\Winsat");
Object gpuType = RegKey.GetValue("PrimaryAdapterString");
string sGPUType = Convert.ToString(gpuType);
return sGPUType;
}

Als Rückgabewert bekomme ich wahrscheinlich ein Leerschlag, sieht zumindest ziemlich leer aus, wenn ich mit ihn MessageBox.Show anzeigen lasse.



Was ist daran falsch? Ich lese mit derselben Methode auch Prozessornamen und Takt aus und dort funktioniert es einwandfrei...



MfG | eightcore
 
was steht denn an der betrefenden position in der registry?
 
Radeon X1300 Series (Microsoft Corporation - WDDM)
 
Nein, es ist ja ein Objekt, und das muss ich zu einer String-Variable konvertieren.

Bei der CPU habe ich es so gelöst:

public string CPUName()
{
//Liest den CPU-Typ aus, z.B. Intel Core 2 Quad 9550.
RegistryKey RegKey = Registry.LocalMachine;
RegKey = RegKey.OpenSubKey
("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");
Object cpuType = RegKey.GetValue("ProcessorNameString");
string sCPUTyp = cpuType.ToString();
return sCPUTyp;
}

Das funktioniert einwandfrei.


Aber das nicht:

public string GPUName()
{
//Liset den Grafikkarten-Typ aus.
RegistryKey RegKey = Registry.LocalMachine;
RegKey = RegKey.OpenSubKey("SOFTWARE\\Microsoft\\Windows
NT\\CurrentVersion\\Winsat");
Object gpuType = RegKey.GetValue("PrimaryAdapterString");
string sGPUType = Convert.ToString(gpuType);
return sGPUType;
}



Edit:

Wenn die letzten beiden Zeilen des Codes für das Auslesen der Graka so aussehen

string sGPUType = gpuType.ToString();
return sGPUType;

Geht überhaupt nichts mehr.

Z.B. habe ïch im Form1_Load testweise eine MessageBox gemacht, die den Grafikkartentyp anzeigen soll (MessageBox.Show(GPUName()). Wenn ich "gpuType.ToString()" anstelle von "Convert.ToString(gpuType);
" verwende, erscheint die MessageBox überhaupt nicht und der Rest von Form1_Load wird gar nicht mehr ausgeführt.
 
Zuletzt bearbeitet:
string sCPUTyp = cpuType.ToString();

string sGPUType = Convert.ToString(gpuType);


Warum machst das bei der GPU anders als bei CPU? ...
Ergänzung ()

Hast du zunächst mal versucht auf der Console den String zu checken? ... Damit du sehen kannst ob deine Methode erstmal so funktioniert, bevor du den String weiter in Form lädst ...
 
CPUName funktioniert bei mir, GPUName aber nicht:
Code:
Object gpuType = RegKey.GetValue("PrimaryAdapterString");

Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Warum?
 
RegKey wurde nicht instanziert.

Versuchs mal mit dem Debuger hinzugehen und zu überprüfen, wo genau das Problem liegt.
 
Code:
RegistryKey RegKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winsat");
String gpuType = RegKey.GetValue("PrimaryAdapterString").ToString();

Sowohl so, als auch mit Convert.ToString(..) klappt hier einwandfrei.

Mach vielleicht mal Console.WriteLine("GPU: "+gpuType); rein um zu sehen ob das soweit klappt ..
 
@eightcore

Ich würde ja drauf tippen, dass dir die Zugriffsrechte auf den RegistryKey fehlen.


Aber imo gibts eh ne bessere Möglichkeit an Infos über das System ranzukommen: WMI

Ich würd dir empfehlen dich mal ein bisschen in das Thema einzulesen.
--> Dieses Tutorial für WMI in C# ist ganz gut (sofern du des Englischen mächtig bist): klick
--> Um die ganze Sache zu erleichtern gibts auch nen WMI Code Creator von MS: klick

Und ich hab auch mal ein kleines (VS 2010) Beispielprojekt angehängt, damit du siehst, was man damit alles anfangen kann. :)
 

Anhänge

OK, ich werde mich mal an WMI versuchen, danke!
 
Zurück
Oben