[Delphi5] In Registry Wert aus lesen ?

Hallo !

Habe folgendes Problem, hier erstmal der Quellcode:

var regist: TRegistry;
i: integer;
s: string;

begin
regist:=TRegistry.Create;
regist.rootKey:=HKEY_LOCAL_MACHINE;
regist.openkey(‚SOFTWARE\Napster‘,true);
s:=regist.readstring(‚Schlüssel‘);
i:=regist.readinteger(‚Zahl‘);
regist.free;
end;

Meine Frage ist jetzt, wie gebe ich s bzw. i in einem Edit Feld aus ???

Vielen Dank schonmal im Vorraus

Martin

Hi Martin !

Du hast ‚s‘ als String und ‚i‘ als Integer deklariert.
Um ‚i‘ in einem Edit-Feld darstellen zu können, mußt Du es von Integer in einen String konvertieren.
z.B. Edit1.Text := IntToStr(i);
Da ‚s‘ bereits als String deklariert ist geht folgendes:
Edit1.Text := s;

Hoffe geholfen zu haben.
Gruß Markus

Erstmal vielen Dank

Hab mich ma wieder nicht angestrengt, hätte auch selber drauf kommen können, is ja eigentlich lachhaft, naja egal, wieso ich ich schreibe, ich habe folgendes Problem, ich möchte aus einem Schlüssel einem Binären Wert auslesen und den in Edit1 aus geben, brauch ich ja kein Hehl draus zu machen, ich will die Binären Daten des Bildschirmschoner Passworts auslesen, habe bis jetzt folgendes:

procedure TForm1.Button1Click(Sender: TObject);
var regist: TRegistry;
i: integer;
s: string;
begin
regist:=TRegistry.Create;
regist.rootkey:=HKEY_Current_User;
regist.openkey(‚Control Panel\Desktop‘,false);
Edit1.Text:=s;
s:=regist.ReadBinaryData(‚SreenSave_Data‘);

regist.free;

end;

Er sagt aber nicht genügend Parameter, wobei ich den Fehler einfach nicht finde, bitte helft mir.

Danke schonmal

Martin

Hi Namensvetter :wink:,

Er sagt aber nicht genügend Parameter

hast Du mal daran gedacht, einfach in die Hilfe zu gucken, was für Parameter „ReadBinaryData“ denn so benötigt?

Mit freundlichem Gruß
Auch Martin

*Auchmafreundlichzurückgrüßt*

Hi !
Also mit der Hilfe habe ich mich rumgeschlagen, und auch diesen Befehl gefunden, also wenn du daraus was erlesen kannst, dann sags mir bitte, hier der Text der hilfe:

TRegistry.ReadBinaryData

Die Methode ReadBinaryData liest einen Binärwert aus einem bestimmten Datenwert, der dem aktuellen Schlüssel zugeordnet ist.

function ReadBinaryData(const Name: String; var Buffer; BufSize: Integer): Integer;

Beschreibung

Mit ReadBinaryData wird ein binärer Wert aus einem bestimmten Datenwert gelesen, der dem aktuellen Schlüssel zugeordnet ist. Der Parameter Name bezeichnet den gewünschten Datenwert. Der Parameter Buffer ist eine Anwendungsvariable, welche die gelesenen Registrierungsdaten aufnimmt. Dieser Puffer muß so groß sein, daß alle zurückgegebenen Daten Platz finden. Der Parameter BufSize ist die Größe des Puffers.

Bei erfolgreicher Ausführung liefert ReadBinaryData die angeforderten Daten zurück. Wenn der Registrierungseintrag einen bekannten Typ (z.B. einen String) enthält, wird eine Exception ausgelöst.

Na denn, hoffe von dir zu hören

Tschau

Nochmal Halloele!

Also mit der Hilfe habe ich mich rumgeschlagen, und auch
diesen Befehl gefunden,

Na, wie hätte ich das wissen können? :smile:

Also… Dreh- und Angelpunkt ist die Deklaration

function ReadBinaryData(const Name: String; var Buffer;
BufSize: Integer): Integer;

„Name“ hast Du ja schon abgehakt. BufSize ist ein banaler Integerwert; damit solltest Du auch keine Verständnisschwierigkeiten haben. Damit fehlt nur noch „Buffer“. „Buffer“ ist ein untypisierter Parameter, kann also „Alles“ sein (solange es „groß genug“ ist). Da es hier um Byte-Werte geht, bietet sich an, Buffer wie folgt zu deklarieren:

VAR Buffer: ARRAY[0..255] OF BYTE

256 Bytewerte sollten ausreichend sein; wenn Du Bedenken hast, daß irgendjemandes Bildschirmschonerpaßwort länger sein könnte, kannst Du hier natürlich auch einen höheren Wert einsetzen.

Damit steht BufSize auch fest: BufSize ist hier gleich 256.

Ach ja, um den Rückgabewert von ReadBinaryData muß man sich natürlich auch noch Gedanken machen. Ist hier vom Typ Integer, also ist es sinnvoll, sich noch einen Integer zu definieren

VAR n: INTEGER;

der das Ergebnis „aufnehmen“ kann.

Langer Rede kurzer Sinn:

n := regist.ReadBinaryData('ScreenSave\_Data',Buffer,256);

Nach Ausführung dieser Zeile stehen die Bytes des Registry-Schlüssels in „Buffer“, und die Länge der Bufferbelegung steht in n.

Den Bufferinhalt in einen String zu konvertieren ist nur noch Kinderkram:

 s := '';
 FOR i := 0 TO n-1 DO
 begin
 s := s+' '+ByteToString(Buffer[i])
 end;

Die Funktion „ByteToString“ macht aus nem Byte-Wert einen String in Hex-Notation (z. B. ‚$4B‘ oder ‚$E2‘ oder ‚$FF‘):

FUNCTION ByteToString (b: BYTE): STRING;

CONST
 NIBBLECHAR:
 ARRAY[$0..$F] OF CHAR
 = ('0','1','2','3','4','5','6','7',
 '8','9','A','B','C','D','E','F');

 VAR s: STRING;

begin
 SetLength(s,2);
 s[1] := NIBBLECHAR[b DIV 16];
 s[2] := NIBBLECHAR[b MOD 16];
 Result := '$'+s
end;

Statt „ByteToString“ kannst Du selbstverständlich auch „IntToStr“ nehmen; die Werte werden Dir dann dezimal angezeigt (die im RegEdit-Browser angezeigten Werte sind Hexadezimalwerte)

Nun noch den String s ins Editfeld Deiner Wahl kopieren und fertig ist die Chose:

Edit1.Text := s

Wenn’s irgendwo haken sollte, einfach nochmal hier posten.

Mit freundlichem Gruß
Martin