![]() |
Name der Grafikkarte auslesen, wie?
Hi,
Wie kann ich den Namen der Grafikkarte im Computer in einem Label oder sonstwas anzeigen lassen?? thx |
Re: Name der Grafikkarte auslesen, wie?
Hallo Delphi-Noobie,
den Namen Deiner Grafikkarte findest Du in der Registry unter "HKEY_LOCAL_MACHINE/.../Enum/PCI". Einfach durchlaufen und nach "Class->Display" suchen und dort dann den Wert von "DeviceDesc" auslesen. Das wars. |
Re: Name der Grafikkarte auslesen, wie?
Jo das hab ich auch hinbekommen, in der Registry bis ..\PCI auszulesen, jedoch heisst ab diesen Ordner der nächste Ordner der zur Grafikkarte fürhrt bei jeden Pc anders! könntest du villeicht nen Code schreiben wie ich das trotzdem hinbekomme? THX
|
Re: Name der Grafikkarte auslesen, wie?
Liste der Anhänge anzeigen (Anzahl: 1)
Hi, Delphi-Noobie,
ich hoffe Du bist es Wert :wink:
Delphi-Quellcode:
Die lauffähige Variante gibt es hier:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ListBox1: TListBox; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } RegConst : String; procedure FillList; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} uses Registry; procedure TForm1.FormCreate(Sender: TObject); begin if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then RegConst := 'Enum\PCI'; if Win32Platform = VER_PLATFORM_WIN32_NT then RegConst := 'SYSTEM\CurrentControlSet\Enum\PCI'; FillList; end; procedure TForm1.FillList; var Reg, Entry, Items : TRegistry; RegEntries, EntryList, ItemList : TStringList; R, E, I : Integer; S : String; begin Reg := TRegistry.Create(KEY_ALL_ACCESS); try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKeyReadOnly(RegConst) then begin RegEntries := TStringList.Create; try Reg.GetKeyNames(RegEntries); Reg.CloseKey; for R := 0 to RegEntries.Count - 1 do begin Entry := TRegistry.Create(KEY_ALL_ACCESS); try Entry.RootKey := HKEY_LOCAL_MACHINE; if Entry.OpenKeyReadOnly(RegConst + '\' + RegEntries.Strings[R]) then begin EntryList := TStringList.Create; Entry.GetKeyNames(EntryList); Entry.CloseKey; for E := 0 to EntryList.Count - 1 do begin Items := TRegistry.Create(KEY_ALL_ACCESS); try Items.RootKey := HKEY_LOCAL_MACHINE; if Items.OpenKeyReadOnly(RegConst + '\' + RegEntries.Strings[R] + '\' + EntryList.Strings[E]) then begin ItemList := TStringList.Create; Items.GetValueNames(ItemList); S := Items.ReadString('FriendlyName'); if S = '' then S := Items.ReadString('DeviceDesc'); if ListBox1.Items.IndexOf(S) = -1 then ListBox1.Items.Add(S); Items.CloseKey; end; finally Items.Free; end; end; Entry.CloseKey; end; finally Entry.Free; end; end; finally RegEntries.Free; end; end; finally Reg.Free; end; end; end. |
Re: Name der Grafikkarte auslesen, wie?
Warum drei TRegistry Objekte? :gruebel:
Und warum mit KEY_ALL_ACCESS? Unter NT ff. bei nicht Admins dürfte das krachen. Da du sowieso nur lesen willst, warumm dann Schreibrechte erzwingen? |
Re: Name der Grafikkarte auslesen, wie?
Erstmal vielen Dank @ Alter Mann! :roll:
Jedoch gibt er mir in der Listbox wieder sehr viele Dateien aus. An erster und 2. Stelle ist die Grafikkarte aber danach kommt noch mehr Müll ca.20 weitere Dateien. er soll aber nur Die grafikkarke rausholen! :wall: |
Re: Name der Grafikkarte auslesen, wie?
Moin, Moin
Lucki um Deine Fragen zu beantworten: weil es schnell gehen sollte. Habe das ganze Live geschrieben und eingefügt; Da kommt es nur darauf an das es läuft, oder? Delphi-Noobie: Es ist ein Beispiel; Fertige Arbeit gibt es nicht und ein bischen "Schmalz" muss schon jeder selber reinstecken. Wenn in der Listbox nur die Grafikkarte auftauchen soll dann musst Du nur eine entsprechende Bedingung einbauen, welche habe ich schon einmal gepostet, s.o. Und das "WIE" entnehme dem Beispiel-Code. Welche Erfahrungen hast Du mit dem Proggen? |
Re: Name der Grafikkarte auslesen, wie?
Erfahrung nicht viel, da ich erst vor nen halben jahr angefangen habe mit Delphi und jetzt wollte ich alles lernen, was mit System auslesen zu tun hat ^^. zu deinen Code: Er sucht alle Strings raus von Devicedesk aber es gibt ja in der Registry 20 Ordner wo überall Devicedesk steht und immer was anderes, daher kommen in der Listbox auch 20 andere Namen noch. Ich hab das jetzt so gemacht, dass er alle Zeilen bis auf die erste in der Listbox löscht, dass nur nur noch die Grafikkarte angezeigt wird. Oder geht das auf anderen Betriebssystemen nicht, weil da die Grafikkarte an 2 Stelle oder so angezeigt wird?
|
Re: Name der Grafikkarte auslesen, wie?
Zitat:
Mach doch einfach mal deinen Registry-Editor auf und suche den o.g. Hauptschlüssel. Also abhängig von deinem Windows entweder "Enum\PCI" (9x) oder "SYSTEM\CurrentControlSet\Enum\PCI" (NT). Hier findest du die entsprechenden Unterschlüssel, die vom Code in die Stringlisten geladen werden. Wenn deine Grafikkarte an erster Stelle angezeigt wird, dann kannst du allgemein davon ausgehen, dass auch der erste dieser Unterschlüssel für deine GraKa zuständig ist. (Zumindest war´s bei mir so.) Und dann schau dir mal die ganzen Einträge an, wo du u.a. auch "DeviceDesk" usw. findest. Ich verweise dich auf den "Class"-Eintrag - der müsste dir weiterhelfen. @Alter Mann: Ich habe mal dein Live-Konzert abgemischt. ;) Auf die String-Variable "RegConst" in der Form-Deklaration kannst du so verzichten, außerdem flogen noch ein paar Variablen raus:
Delphi-Quellcode:
procedure TForm1.FillList;
const RegConst : array[boolean]of string = ('Enum\PCI','SYSTEM\CurrentControlSet\Enum\PCI'); var Reg : TRegistry; RegEntries, EntryList : TStringList; i, j : Integer; S : String; begin Reg := TRegistry.Create(KEY_READ); if Reg <> nil then try Reg.RootKey := HKEY_LOCAL_MACHINE; RegEntries := TStringList.Create; EntryList := TStringList.Create; if(RegEntries <> nil) and (EntryList <> nil) then try if Reg.OpenKeyReadOnly(RegConst[Win32Platform = VER_PLATFORM_WIN32_NT]) then try Reg.GetKeyNames(RegEntries); finally Reg.CloseKey; end; for i := 0 to RegEntries.Count - 1 do begin EntryList.Clear; if Reg.OpenKeyReadOnly(RegConst[Win32Platform = VER_PLATFORM_WIN32_NT] + '\' + RegEntries[i]) then try Reg.GetKeyNames(EntryList); finally Reg.CloseKey; end; for j := 0 to EntryList.Count - 1 do if Reg.OpenKeyReadOnly(RegConst[Win32Platform = VER_PLATFORM_WIN32_NT] + '\' + RegEntries[i] + '\' + EntryList[j]) then try if Reg.ValueExists('FriendlyName') then S := Reg.ReadString('FriendlyName') else if Reg.ValueExists('DeviceDesc') then S := Reg.ReadString('DeviceDesc') else S := ''; if(S <> '') and (ListBox1.Items.IndexOf(S) = -1) then ListBox1.Items.Add(S); finally Reg.CloseKey; end; end; finally EntryList.Free; RegEntries.Free; end; finally Reg.Free; end; end; |
Re: Name der Grafikkarte auslesen, wie?
Hey das hat mir echt weiter geholfen mit der Class danke! Ich hab den Code jetzt so umgeschrieben, dass er nur noch der 1. Ordner mit der Grafikkarte ausliest! Ich hoffe, dass es so richtig ist und würde mich freuen, wenn ihr den Code auch mal ausprobiert und sagt ob nur die Grafikkarte angezeigt wird! THX
Delphi-Quellcode:
Das einzigste, was Ihr jetzt braucht is ein Label(label1) und in Form1.create muss stehen: FillList;
procedure TForm1.FillList;
const RegConst : array[boolean]of string = ('Enum\PCI','SYSTEM\CurrentControlSet\Enum\PCI'); var Reg : TRegistry; RegEntries, EntryList : TStringList; i, j : Integer; S : String; begin Reg := TRegistry.Create(KEY_READ); if Reg <> nil then try Reg.RootKey := HKEY_LOCAL_MACHINE; RegEntries := TStringList.Create; EntryList := TStringList.Create; if(RegEntries <> nil) and (EntryList <> nil) then try if Reg.OpenKeyReadOnly(RegConst[Win32Platform = VER_PLATFORM_WIN32_NT]) then try Reg.GetKeyNames(RegEntries); finally Reg.CloseKey; end; for i := 0 to RegEntries.Count - 1 do begin EntryList.Clear; if Reg.OpenKeyReadOnly(RegConst[Win32Platform = VER_PLATFORM_WIN32_NT] + '\' + RegEntries[i]) then try Reg.GetKeyNames(EntryList); finally Reg.CloseKey; end; for j := 0 to EntryList.Count - 1 do if Reg.OpenKeyReadOnly(RegConst[Win32Platform = VER_PLATFORM_WIN32_NT] + '\' + RegEntries[i] + '\' + EntryList[j]) then try if Reg.ValueExists('FriendlyName') then S := Reg.ReadString('FriendlyName') else if reg.ReadString('Class') = 'Display' then begin //<- Display wegen Grafikkarte if reg.ValueExists('ParentIDPrefix') then begin //<- Das war bei mir nur im if Reg.ValueExists('DeviceDesc') then // 1. ordner vorhanden, deswegen S := Reg.ReadString('DeviceDesc') // hab ich es hier eingebaut end end else S := ''; if(S <> '') then label1.caption:=S; finally Reg.CloseKey; end; end; finally EntryList.Free; RegEntries.Free; end; finally Reg.Free; end; end; Ich hoffe, dass es bei euch auch klappt. Wenn ja bitte schreiben :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz