Einzelnen Beitrag anzeigen

MathiasSimmack
(Gast)

n/a Beiträge
 
#9

Re: Name der Grafikkarte auslesen, wie?

  Alt 1. Feb 2004, 10:47
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;
  Mit Zitat antworten Zitat