![]() |
[TRegistry, D3] "Ungültiger Datentyp"
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 |
Re: [TRegistry, D3] "Ungültiger Datentyp"
Moin Tommi,
vielleicht könntest Du ja mal zeigen, wie Du es machst. |
Re: [TRegistry, D3] "Ungültiger Datentyp"
Code:
Ich weiß, es ist "quick'n'dirty" ohne Fehlerkontrolle, aber ich will mir eh nur ein Tool für den Heimgebrauch basteln.
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; 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... |
Re: [TRegistry, D3] "Ungültiger Datentyp"
Moin Tommi,
probier das hier mal aus:
Delphi-Quellcode:
es gibt nämlich noch ein paar Registry Datentypen, die das Icon vom Typ binary haben, aber nicht vom Typ binary sind.
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; 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. |
Re: [TRegistry, D3] "Ungültiger Datentyp"
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? :gruebel:
|
Re: [TRegistry, D3] "Ungültiger Datentyp"
Moin Tommi,
ein Blick in die Windows Header sagt da etwas anderes: REG_BINARY = 3 :gruebel: 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. |
Re: [TRegistry, D3] "Ungültiger Datentyp"
Hehe :oops: hab ich mich doch glatt in der Zeile geirrt...
Noch eine hoffentlich letzte Frage zum Abschluß - wie kann ich diesen Wert wiederum setzen? Danke! |
Re: [TRegistry, D3] "Ungültiger Datentyp"
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:
Vorausgesetzt, Du liest auch mit RegQueryValueEx den Wert aus, versteht sich.
var
pData : PByte; dwSize : DWORD; //... RegSetValueEx(hRootKey,'Profile0',0,dwType,pData,dwSize); 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. |
Re: [TRegistry, D3] "Ungültiger Datentyp"
Oha... Danke für die Warnung... :pale:
Ich muß mal schaun, weil aus irgendeinem Grund "RegQueryValueEx" nicht in den String "Profile0" reinschreiben will
Code:
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... :?
RegQueryValueEx(hRootKey,'Profile0',nil,@dwType,@Profile0[1], pSize)
|
Re: [TRegistry, D3] "Ungültiger Datentyp"
Okay... habs schon rausgekriegt... es soll heißen
Code:
:mrgreen:
RegQueryValueEx(hRootKey,'Profile0',nil,@dwType,PByte(Profile0[1]), pSize)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz