Lecture de donnée binaire dans le registre

Résolu
alexis2015 Messages postés 73 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 24 juillet 2005 - 8 févr. 2005 à 10:53
alexis2015 Messages postés 73 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 24 juillet 2005 - 11 févr. 2005 à 21:40
Bonjour, et bien voilà j'ai un gros problème pour lire des donnée binaire dans le registre.

Pour écrire ca, ca va. Mais pour lire ... c'est la foire : soit la
valeur retournée ne sont que des "?" ou encore la valeur + ces
caractères-ci "ð-°" avec des retour à la ligne entre autre.

(Je me suis inspiré d'une source de "
TheWhiteShadow" de ce site)




Voici le code :

reg: TRegistry;

DataSize: LongWord;

ValueName: String;

s: String;

_Wide: WideString;

begin

reg := TRegistry.Create;

reg.RootKey := HKEY_CURRENT_USER;

reg.OpenKey('\test', False);



ValueName := 'Bdata';

DataSize := reg.GetDataSize(ValueName);

SetLength(_Wide, DataSize);

Reg.ReadBinaryData(ValueName, PWideChar(_wide)^, DataSize);

move(_wide,s,datasize);

//
s := WideCharToString(PWideChar(_Wide));


ShowMessage(s);

reg.Free;

end;




Voici les résulats obtenus :

Valeur registre Valeur "retour"

"Lire"

"Lirer"

"Lire donnée"
"Lire
donnée
\





|> + erreur "... violation d'accès ..."



"

/

"Lire donnée binaire" "Lire donnée binaire° \


ð-°

|


ð-°

|> + erreur ""... violation d'accès ..."


ð-°

|


ð-°

|


ð"

/



Si qqn pourrait m'aider marci bcp d'avance ...



Alexis

6 réponses

cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
9 févr. 2005 à 08:37
Salut,



Et quelle est la valeur binaire que tu as écrite ?

ð-° sont des caractères représentant des valeurs binaires tout à fait correctes.

Si tu veux les afficher comme dans RegEdit, il faut utiliser la fonction IntToHex pour chaque octet retourné.

WideString est codé avec deux octets par caractère, donc ... prudence.

Cela ne doit pas non plus arranger tes affaires avec la fonction move (c'est elle qui provoque la violation d'accès)



Si j'ai tout compris, je te propose :



var


reg: TRegistry;

DataSize: LongWord;

ValueName: string;

s: string;

Tab: array of Byte;

begin

reg := TRegistry.Create;

try

reg.RootKey := HKEY_CURRENT_USER;

reg.OpenKey('\test', False);

ValueName := 'Bdata';

DataSize := reg.GetDataSize(ValueName);

SetLength(Tab, DataSize);

Reg.ReadBinaryData(ValueName, Tab[0], DataSize);

s := '';

for i := 0 to DataSize - 1 do

s := s + IntToHex(Tab[i], 2) + ' ';

ShowMessage(LowerCase(s));

Reg.CloseKey;

finally

reg.Free;

end;

end;







Ken@vo

____________________

Code, Code, Codec !
3
alexis2015 Messages postés 73 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 24 juillet 2005
11 févr. 2005 à 21:40
Me revoilà,


j'ai cherché, et recherché, trifouillé partout et j'ai trouvé par hasard la fonction
string().

j'ai fait quelque tests et ca marche !!!



Donc après quelques modifs ca donne ...




var


reg: TRegistry;

DataSize: LongWord;

ValueName,s: string;

i:integer;

Tab: array of Byte;

begin

reg := TRegistry.Create;

try

reg.RootKey := HKEY_CURRENT_USER;

reg.OpenKey('\test', False);

ValueName := 'Bdata';

DataSize := reg.GetDataSize(ValueName);

SetLength(Tab, DataSize);

Reg.ReadBinaryData(ValueName, Tab[0], DataSize);

s := '';

for i := 0 to DataSize - 1 do

s := s + IntToHex(Tab[i], 2) + ' ';

ShowMessage(LowerCase(s)); // retour en Hexa

ShowMessage(string(tab)); // retour en Chaine de texte


Reg.CloseKey;

finally

reg.Free;

end;

end;
3
alexis2015 Messages postés 73 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 24 juillet 2005
8 févr. 2005 à 10:56
M**** je me suis fait C**** à bien tous disposer et voilà le résultat !

Bravo alors là je dit bravo ! mem pas de BBcode ... (bien utile prtant)



Enfi voilà ... j'espère que vous comprendrez qqch.
0
alexis2015 Messages postés 73 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 24 juillet 2005
8 févr. 2005 à 11:02
j'ai quand même pris la peine de corriger pr voir ce ke ca donne .... (coisons les doigts)

Voici les résulats obtenus :

Valeur registre Valeur "retour"
"Lire"
"Lirer"


"Lire donnée" "Lire
donnée \





|> + erreur "... violation d'accès ..."

"
/

"Lire donnée binaire" "Lire donnée binaire° \




ð-°
|

ð-°

|> + erreur ""... violation d'accès ..."

ð-°
|

ð-°
|

ð"
/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
alexis2015 Messages postés 73 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 24 juillet 2005
8 févr. 2005 à 11:06
M**** !!!



Voici les résulats obtenus :

Valeur registre Valeur "retour"
"Lire"
"Lirer"




"Lire donnée" "Lire
donnée


"

+ erreur "... voliation d'accès ..."




"Lire donnée binaire" "Lire donnée binaire°




ð-°

ð-°

ð-°

ð-°

ð"


+ erreur "... voliation d'accès ..."
0
alexis2015 Messages postés 73 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 24 juillet 2005
9 févr. 2005 à 16:17
Merci pr la source, ca marche du tonnère mais la chaîne texte de retour est sous la form hexa.

j'aurai aimer la transformer en string.



A propos des "
ð-°"
: non ds le registre g écrit (sous forme texte : "lire" "lire donnée",
...) et c'est lors de la lecture qu'il m'affiche ça sinon dans la BDR
ca n'y est pas inscrit.
0
Rejoignez-nous