AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Registry auslesen unsicher

Ein Thema von HomerGER · begonnen am 8. Jun 2003 · letzter Beitrag vom 11. Jun 2003
 
Benutzerbild von HomerGER
HomerGER

Registriert seit: 8. Jun 2003
390 Beiträge
 
Delphi 7 Professional
 
#1

Registry auslesen unsicher

  Alt 8. Jun 2003, 23:55
hallo ich hab mir ein Function zusammengebaut
sie funktiniert auch soweit nur bei multisz bin ein bischen unsicher
zwar lese ich nur bin, dw, sz und multi aus aber ganz wohl bin ich bei der sache nicht
ich habe den multi jetzt bei unbekannt eingesetzt
aber das ist zu unsicher
kann mir jemand sagen wie ich das besser machen kann ?

//Type (öffentlich)
type
reg1_r = Record
s1 : HKEY;
s2 : String;
s3 : String;
end;
Code:
//******************************************************************************
//ÜbergabeFunction
//Wert Reg aus der Registry lesen
Function Reg_Lesen_RYU(input_r : reg1_r) : reg_wert_r;
const bufsize = 100;
var
Reg : TRegistry;
output_s : String;
string_s : String;
integer_i : Integer;
byte_buffer_dab : Array of Byte;
byte_ausgabe_s : String;
byte_size_i : integer;
byte_len_i : Integer;
i : Integer;
multi_type_c: Cardinal;
multi_size_c: Cardinal;
multi_str_s: String;
begin
    Reg := TRegistry.Create;
    output_s := '';
    string_s := '';

    try
        //HKEY lesen
        Reg.RootKey := input_r.s1;

        //Schlüssel lesen
        if not Reg.OpenKey(input_r.s2, False) then
        begin
            //Kein Schlüssel vorhanden
            output_s := 'nokey';
            Result.s1 := output_s;
            Result.s2 := '';
        end
        else
        begin
            //Wert lesen
            if Reg.ValueExists(input_r.s3) = False then
            begin
                 //Kein Wert vorhanden
                output_s := 'novalue';
                Result.s1 := output_s;
                Result.s2 := '';
            end
            else
            begin
            //String
                if (Reg.GetDataType(input_r.s3) = rdString) then
                begin
                    string_s := Reg.readstring(input_r.s3);
                    Result.s1 := 'sz';
                    Result.s2 := string_s;
                end
            //Integer
                else if (Reg.GetDataType(input_r.s3) = rdInteger) then
                begin
                    integer_i := Reg.readinteger(input_r.s3);
                    Result.s1 := 'dw';
                    Result.s2 := IntToStr(integer_i);
                end
            //Binary
                else if (Reg.GetDataType(input_r.s3) = rdBinary) then
                begin
                    SetLength(byte_buffer_dab, byte_size_i);

                    byte_len_i := Reg.ReadBinaryData(input_r.s3, PChar(byte_buffer_dab)^, byte_size_i);

                    byte_ausgabe_s := '';
                    for i := 0 to byte_len_i - 1 do
                    begin
                        if Length(IntToStr(byte_buffer_dab[i])) = 1 then
                        begin
                            byte_ausgabe_s := byte_ausgabe_s + '0' + IntToStr(byte_buffer_dab[i]);
                        end
                        else
                        begin
                            byte_ausgabe_s := byte_ausgabe_s + IntToStr(byte_buffer_dab[i]);
                        end;
                    end;
                    Result.s1 := 'bi';
                    Result.s2 := byte_ausgabe_s;
                end
            //Erweiterter String
                else if (Reg.GetDataType(input_r.s3) = rdExpandString) then
                begin
                    string_s := Reg.readstring(input_r.s3);
                    Result.s1 := 'es';
                    Result.s2 := string_s;
                end
            //Mehrzeiliger String
                else if (Reg.GetDataType(input_r.s3) = rdUnknown) then
                begin
                    multi_size_c := 0;
                    RegQueryValueEx(Reg.CurrentKey, PChar(input_r.s3), nil, @multi_type_c, nil, @multi_size_c);
                   
                    SetLength(multi_str_s, multi_size_c - 1);
                    if multi_size_c > 1 then
                    begin
                    RegQueryValueEx(Reg.CurrentKey, PChar(input_r.s3), nil, @multi_type_c, PByte(multi_str_s), @multi_size_c);
                    end;
                   
                    for i := Length(multi_str_s) downto 1 do
                    begin
                        if multi_str_s[i] = #0 then
                        begin
                            multi_str_s[i] := #13;
                        end;
                    end;
                    if (multi_str_s <> '') then
                    begin
                        Result.s1 := 'mz';
                        Result.s2 := multi_str_s;
                    end;
                end
            //Fehler
                else
                begin
                    //Fehler kein Typ gefunden
                end;
            end;
        Reg.CloseKey;
        end;
    finally
    Reg.Free;
    end;
end;
der teil um den es mir geht ist der hier
//Mehrzeiliger String
else if (Reg.GetDataType(input_r.s3) = rdUnknown) then
begin
multi_size_c := 0;
RegQueryValueEx(Reg.CurrentKey, PChar(input_r.s3), nil, @multi_type_c, nil, @multi_size_c);

SetLength(multi_str_s, multi_size_c - 1);
if multi_size_c > 1 then
begin
RegQueryValueEx(Reg.CurrentKey, PChar(input_r.s3), nil, @multi_type_c, PByte(multi_str_s), @multi_size_c);
end;

for i := Length(multi_str_s) downto 1 do
begin
if multi_str_s[i] = #0 then
begin
multi_str_s[i] := #13;
end;
end;
if (multi_str_s <> '') then
begin
Result.s1 := 'mz';
Result.s2 := multi_str_s;
end;
end
  Mit Zitat antworten Zitat
 


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 12:31 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