Zitat von
Delphi-Noobie:
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?
A) das wäre möglich und B) wird nicht jeder die gleiche Grafikkarte wie du haben, so dass du auch den Namen, bspw. "ATI Radeon ..." (oder was immer bei dir drin steht) nicht benutzen kannst.
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;