AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Name der Grafikkarte auslesen, wie?

Name der Grafikkarte auslesen, wie?

Ein Thema von Delphi-Noobie · begonnen am 26. Jan 2004 · letzter Beitrag vom 21. Okt 2015
Antwort Antwort
Seite 1 von 2  1 2   
Delphi-Noobie

Registriert seit: 28. Nov 2003
102 Beiträge
 
#1

Name der Grafikkarte auslesen, wie?

  Alt 26. Jan 2004, 18:54
Hi,

Wie kann ich den Namen der Grafikkarte im Computer in einem Label oder sonstwas anzeigen lassen??
thx
Wieviel Lösungen hat die Gleichung x^13=1? .... 13!
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Name der Grafikkarte auslesen, wie?

  Alt 31. Jan 2004, 11:32
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.
  Mit Zitat antworten Zitat
Delphi-Noobie

Registriert seit: 28. Nov 2003
102 Beiträge
 
#3

Re: Name der Grafikkarte auslesen, wie?

  Alt 31. Jan 2004, 14:04
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
Wieviel Lösungen hat die Gleichung x^13=1? .... 13!
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Name der Grafikkarte auslesen, wie?

  Alt 31. Jan 2004, 19:03
Hi, Delphi-Noobie,

ich hoffe Du bist es Wert

Delphi-Quellcode:

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.
Die lauffähige Variante gibt es hier:
Angehängte Dateien
Dateityp: zip delphinoobie.zip (6,6 KB, 61x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Name der Grafikkarte auslesen, wie?

  Alt 31. Jan 2004, 22:00
Warum drei TRegistry Objekte?

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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Delphi-Noobie

Registriert seit: 28. Nov 2003
102 Beiträge
 
#6

Re: Name der Grafikkarte auslesen, wie?

  Alt 31. Jan 2004, 23:44
Erstmal vielen Dank @ Alter Mann!

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!
Wieviel Lösungen hat die Gleichung x^13=1? .... 13!
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Name der Grafikkarte auslesen, wie?

  Alt 1. Feb 2004, 09:33
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?
  Mit Zitat antworten Zitat
Delphi-Noobie

Registriert seit: 28. Nov 2003
102 Beiträge
 
#8

Re: Name der Grafikkarte auslesen, wie?

  Alt 1. Feb 2004, 09:59
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?
Wieviel Lösungen hat die Gleichung x^13=1? .... 13!
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#9

Re: Name der Grafikkarte auslesen, wie?

  Alt 1. Feb 2004, 11: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
Delphi-Noobie

Registriert seit: 28. Nov 2003
102 Beiträge
 
#10

Re: Name der Grafikkarte auslesen, wie?

  Alt 1. Feb 2004, 12:40
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:
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') = 'Displaythen 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;
Das einzigste, was Ihr jetzt braucht is ein Label(label1) und in Form1.create muss stehen: FillList;
Ich hoffe, dass es bei euch auch klappt. Wenn ja bitte schreiben
Wieviel Lösungen hat die Gleichung x^13=1? .... 13!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz