AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi [TRegistry, D3] "Ungültiger Datentyp"
Thema durchsuchen
Ansicht
Themen-Optionen

[TRegistry, D3] "Ungültiger Datentyp"

Ein Thema von Tommi · begonnen am 1. Jul 2004 · letzter Beitrag vom 1. Jul 2004
Antwort Antwort
Benutzerbild von Tommi
Tommi

Registriert seit: 23. Mai 2003
27 Beiträge
 
Delphi 3 Professional
 
#1

[TRegistry, D3] "Ungültiger Datentyp"

  Alt 1. Jul 2004, 21:38
Hi,

ich hab ein Problem mit dem Auslesen eines binären Registrywerts mit der Methode ReadBinaryData (unter Delphi 3, Win 2000). Ich weiß durch Blick in regedit, daß der betreffende Wert (eingerichtet von einer WLAN-Karten-Treibersoftware), vom Typ REG_BINARY ist, aber während der Laufzeit erhalte ich die Fehlermeldung "Ungültiger Datentyp für 'Profile0'" - wobei Profile0 der betreffende, binäre Wert wäre.
Ich bin auf jeden Fall im richtigen Key, hab auch das richtige Root-Key gesetzt. Und ein anderer binärer Wert im selben Key läßt sich aus irgendeinem Grund auslesen, nur nicht Profile0.

Habt ihr eine Ahnung, woran das liegen könnte?

Danke im Voraus
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: [TRegistry, D3] "Ungültiger Datentyp"

  Alt 1. Jul 2004, 21:44
Moin Tommi,

vielleicht könntest Du ja mal zeigen, wie Du es machst.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Tommi
Tommi

Registriert seit: 23. Mai 2003
27 Beiträge
 
Delphi 3 Professional
 
#3

Re: [TRegistry, D3] "Ungültiger Datentyp"

  Alt 1. Jul 2004, 21:48
Code:
procedure LoadProfile0;
var reg : TRegistry;
    size : integer;
Begin
     reg := TRegistry.Create;
     reg.RootKey := HKEY_LOCAL_MACHINE;
     Profile0 := StringOfChar(#00,177);
     If reg.OpenKey ( device_key, false ) Then
     Begin
          Form1.StaticText1.Caption := Form1.StaticText1.Caption + device_key;
          reg.ReadBinaryData('Profile0', Profile0[1], 177 );
          Form1.StaticText3.Caption := Profile0;
     End;
     reg.CloseKey;
     reg.free;
End;
Ich weiß, es ist "quick'n'dirty" ohne Fehlerkontrolle, aber ich will mir eh nur ein Tool für den Heimgebrauch basteln.

device_key ist der Schlüssel mitsamt Pfad zum WLAN-Eintrag (Marke Realtek), welcher zuvor in einer anderen Prozedur ermittelt wird. Sinn und Zweck des Programms soll das automatische Abändern des WEP-Passphrases sein, um das WLAN ein bissl sicherer zu machen...


EDIT: die Variable Profile0 ist global vom Typ string...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: [TRegistry, D3] "Ungültiger Datentyp"

  Alt 1. Jul 2004, 22:39
Moin Tommi,

probier das hier mal aus:

Delphi-Quellcode:
var
  hRootKey : HKEY;
  dwType : DWORD;

begin
  if RegOpenKey(HKEY_LOCAL_MACHINE,PChar(device_key),hRootKey) <> ERROR_SUCCESS then exit;
  try
    if RegQueryValueEx(hRootKey,'Profile0',nil,@dwType,nil,nil) <> ERROR_SUCCESS then exit;
    ShowMessage(IntToStr(dwType));
  finally
    RegCloseKey(hRootKey);
  end;
end;
es gibt nämlich noch ein paar Registry Datentypen, die das Icon vom Typ binary haben, aber nicht vom Typ binary sind.
Zumindest habe ich so den Verdacht, dass D3 den Typ einfach nicht als solchen erkennt.

Ich hoffe mal, dass D3 die beiden Funktionen so implementiert, dass Du sie so 1:1 benutzen kannst.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Tommi
Tommi

Registriert seit: 23. Mai 2003
27 Beiträge
 
Delphi 3 Professional
 
#5

Re: [TRegistry, D3] "Ungültiger Datentyp"

  Alt 1. Jul 2004, 22:46
Hmm... Vielen Danke für den Code. Das Ergebnis zeigt mir eine "3" an... ein Blick in die Delphi-Hilfe weist darauf hin, daß der Eintrag also vom Typ "REG_EXPAND_SZ" wär... somit eine Art String, aber wie greif ich nun darauf zu?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: [TRegistry, D3] "Ungültiger Datentyp"

  Alt 1. Jul 2004, 22:52
Moin Tommi,

ein Blick in die Windows Header sagt da etwas anderes:
REG_BINARY = 3



Stellt sich die Frage, wieso Delphi jetzt meckert... sollte doch so sein.

Wenn Du bei RegQueryValueEx die letzten beiden Parameter verwendest, kannst Du damit den Wert auslesen
Der Einfachheit halber habe ich mir das hier nur gespart, da die Funktion auch ohne Abfrage des Wertes funktioniert.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Tommi
Tommi

Registriert seit: 23. Mai 2003
27 Beiträge
 
Delphi 3 Professional
 
#7

Re: [TRegistry, D3] "Ungültiger Datentyp"

  Alt 1. Jul 2004, 22:56
Hehe hab ich mich doch glatt in der Zeile geirrt...

Noch eine hoffentlich letzte Frage zum Abschluß - wie kann ich diesen Wert wiederum setzen?

Danke!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: [TRegistry, D3] "Ungültiger Datentyp"

  Alt 1. Jul 2004, 23:08
Moin Tommi,

sollte eigentlich so gehen:
Ändere den ausgelesenen Wert wie gewünscht, und dann kannst Du die Parameter von RegQueryValueEx so in RegSetValueEx übernehmen (falls mir die Borland Deklaration da keinen Strich durch die Rechnung macht )

mal im Groben

Delphi-Quellcode:
var
  pData : PByte;
  dwSize : DWORD;
 
//...
  RegSetValueEx(hRootKey,'Profile0',0,dwType,pData,dwSize);
Vorausgesetzt, Du liest auch mit RegQueryValueEx den Wert aus, versteht sich.

Vor dem Anwenden von solchen schreibenden Funktionen auf die Registry:
Prüfen, ob sie auch wirklich tun, was sie sollen, oder ein Testsystem nehmen.
Ansonsten ist u.U. eine Neuinstallation fällig.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Tommi
Tommi

Registriert seit: 23. Mai 2003
27 Beiträge
 
Delphi 3 Professional
 
#9

Re: [TRegistry, D3] "Ungültiger Datentyp"

  Alt 1. Jul 2004, 23:21
Oha... Danke für die Warnung...

Ich muß mal schaun, weil aus irgendeinem Grund "RegQueryValueEx" nicht in den String "Profile0" reinschreiben will

Code:
RegQueryValueEx(hRootKey,'Profile0',nil,@dwType,@Profile0[1], pSize)
wobei pSize ein Zeiger auf Size : DWord ist... die If-Abfrage sorgt jedenfalls, Deinem Code entsprechend, für einen Abbruch und der String scheint leer zu sein...
  Mit Zitat antworten Zitat
Benutzerbild von Tommi
Tommi

Registriert seit: 23. Mai 2003
27 Beiträge
 
Delphi 3 Professional
 
#10

Re: [TRegistry, D3] "Ungültiger Datentyp"

  Alt 1. Jul 2004, 23:26
Okay... habs schon rausgekriegt... es soll heißen

Code:
RegQueryValueEx(hRootKey,'Profile0',nil,@dwType,PByte(Profile0[1]), pSize)
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:01 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