Entwickler-Ecke

Dateizugriff - ProzessorName


Robii - Di 09.03.10 22:08
Titel: ProzessorName
Guten Abend, ich versuche mit einer Procedure den Prozessornamen von meinem Computer herrauszufinden. Diesen Quellcode habe ich bis jetzt :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function TForm1.GetProzessorName: string;
var reg: TRegistry;
begin
  result:='Unbekannter Prozessor';
  reg:=TRegistry.Create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('Hardware\Description\System\CentralProcessor\0', false);
    result:=reg.ReadString('ProcessorNameString');
  finally
    reg.free;
  end;
end;


Aber irgendwie ist das Result immer leer..
Wenn ich so mit dem RegistrierungsEditor nachgucke, ist der Wert aber vorhanden.
Wieso klappt dies nicht?

Lieben Gruß.

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 09.03.2010 um 21:13


Narses - Di 09.03.10 22:15

Moin!

Ich würde das eher per WMI [http://www.delphi-forum.de/topic_Komponenten+zur+WMIAbfrage+TWMIConnection++TWMIQuery+v102_94142.html] machen, ist besser als per Registry. :nixweiss:

cu
Narses


Robii - Di 09.03.10 22:27

Hey leider scheitere ich an der Installation. Ich benutze Delphi 2010 und dort klappt das anscheinend nicht so ganz.
Könnt ihr mir evtl. trotzdem sagen wieso meine Procedure nicht funktioniert?

Lg


Narses - Di 09.03.10 22:30

Moin!

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Hey leider scheitere ich an der Installation. Ich benutze Delphi 2010 und dort klappt das anscheinend nicht so ganz.
Ja, könnte sein, dass das noch nicht Unicodesave ist. War ein Versuch. ;)

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Könnt ihr mir evtl. trotzdem sagen wieso meine Procedure nicht funktioniert?
Vielleicht reichen die Rechte nicht aus? Mal den Returncode von .OpenKey() ausgewertet? :nixweiss:

cu
Narses


Delete - Di 09.03.10 22:31

Welches Betriebssystem?
Welche Rechte hat der Benutzer?
Was sagen die Rückgabewerte?
Was sagt GetLastError?

Bitte erst mal Hausaufgaben machen. ;)


SvenAbeln - Di 09.03.10 22:34

Ich vermute mal du verwendest Windows Vista oder Windows 7?
Ein Normaler User hat nur ReadOnly Zugriff auf HKEY_LOCAL_MACHINE, TRegistry geht aber als Default von KEY_ALL_ACCESS aus.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function TForm1.GetProzessorName: string;
var reg: TRegistry;
begin
  result:='Unbekannter Prozessor';
  reg:=TRegistry.Create(KEY_READ);
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('Hardware\Description\System\CentralProcessor\0', false);
    result:=reg.ReadString('ProcessorNameString');
  finally
    reg.free;
  end;
end;


Robii - Di 09.03.10 22:37

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Welches Betriebssystem?
Welche Rechte hat der Benutzer?
Was sagen die Rückgabewerte?
Was sagt GetLastError?

Bitte erst mal Hausaufgaben machen. ;)


Ok, ich mache mal meine Hausaufgaben. ;)

Betriebssystem: Windows Vista.
Benutzer hat Adminrechte.
Der Rückgabewert bleibt einfach leer.
GetLastError sagt:
Ehm wie benutze ich das? ;)

Hoffe das hilft erstmal.

E.: SvenAbeln's Beitrag hat geholfen, jetzt klappt es. Danke ;)
Trotzdem wärs interessant zu wissen wie ich GetLastError verwende?


Delete - Di 09.03.10 22:43

Ich meine logischerweise nicht den Rückgabewert DEINER Funktion, sondern der Funktionen, die du aufrufst, wie zum Beispiel reg.OpenKey. Da hättest du nämlich gesehen, dass GetLastError 5 (Zugriff verweigert) liefert. Und wenn man dann noch weiß, dass der Construktor von TRegistry standardmäßig die Schlüssel zum Lesen UND Schreiben öffnet, hat man schon den Fehler gefunden.