WD11 - Lire des valeurs du type "REG_MULTI_SZ" dans la base de registres

Le
Paula
Boujour

Dans mon programme windev, je souhaite récupérer les données d'une valeur du
type "REG_MULTI_SZ".
Or, avec la commande RegistreLit du Wlangage, cela ne marche pas car une
instruction du genre
RegistreLit("HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesBthServ","DependOnGroup")
ne renvoi pas les valeurs de la données qui sont après le premier RC.

Si vous avez la solution (wlangage ou api), je suis preneuse.
Merci d'avance.

Paula
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Georges Peyre
Le #14620301
Paula a pensé très fort :
Boujour

Dans mon programme windev, je souhaite récupérer les données d'une valeur du
type "REG_MULTI_SZ".
Or, avec la commande RegistreLit du Wlangage, cela ne marche pas car une
instruction du genre
RegistreLit("HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesBthServ","DependOnGroup")
ne renvoi pas les valeurs de la données qui sont après le premier RC.

Si vous avez la solution (wlangage ou api), je suis preneuse.
Merci d'avance.

Paula



//traitement avec API
iHandle est un entier
strCle est une chaîne
strValeur est une chaîne
strDonnees est une chaîne

// avec un exemple de clé quelconque pour intégrer 4 données

strCle = "SYSTEMControlSet001ControlSession Manager"+Caract(0)
strValeur = "PendingFileRenameOperations"
strDonnees = "??Exemple de donnée 1" + Caract(0) + Caract(0) + ...
"??Exemple de donnée 2" + Caract(0) + Caract(0) + ...
"??Exemple de donnée 3" + Caract(0) + Caract(0) + ...
"??Exemple de donnée 4" + NumériqueVersChaîne(00000, "05X")

//Ouverture du registre
SI API("Advapi32","RegOpenKeyExA",HKEY_LOCAL_MACHINE,&strCle,0,KEY_READ
+ KEY_SET_VALUE,&iHandle) = 0 ALORS
//si
API("Advapi32","RegOpenKeyExA",HKEY_LOCAL_MACHINE,&strCle,0,KEY_SET_VALUE,&iHandle)
= 0 ALORS
SI
API("Advapi32","RegSetValueExA",iHandle,&strValeur,0,7,&strDonnees,Taille(strDonnees))
= 0 ALORS
//Info("ok")
SINON
Erreur(ErreurInfo(errComplet))
FIN
//Fermeture du registre
API("Advapi32","RegCloseKey",iHandle)
SINON
Erreur(ErreurInfo())
FIN


Voir aussi cette discussion sur le forum : tu y trouveras des
explications pertinentes de Gilles Guédikian que je remercie encore
http://groups.google.fr/group/fr.comp.developpement.agl.windev/browse_thread/thread/fc147779bc1ec9a6/e1889363f4b60741?lnk=gst&q=REG_MULTI_SZ&rnum=5#e1889363f4b60741

--
Elle est pas belle la vie ?
BMichel
Le #14620281
> Dans mon programme windev, je souhaite récupérer les données d'une valeur
du type "REG_MULTI_SZ".
Or, avec la commande RegistreLit du Wlangage, cela ne marche pas car une
instruction du genre
RegistreLit("HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesBthServ","DependOnGroup")
ne renvoi pas les valeurs de la données qui sont après le premier RC.




Il me semble que tu te trompes car la commande RegistreLit du Wlangage
permet de lire les données d'une valeur du type "REG_MULTI_SZ" dans la BDR
de Windows,.

Exemple:
Soit la clé HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesPolicyAgent
Cette clé possède (sur ma machine sous XP en tout cas), une valeur
"DependOnService" du type "REG_MULTI_SZ" et les données de cette valeur
sont:
- RPCSS
- Tcpip
- IPSec

Ainsi, soit le code suivant:
chainelu est une chaine
chainelu=RegistreLit("HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesPolicyAgent",
"DependOnService")
info(chainelu)

Dans cette situation, c'est vrai que j'obtiens "RPCSS" et que je ne vois pas
les autres données de cette valeur qui sont "Tcpip" et "IPSec".
Mais c'est normal car les données de la valeur sont séparées par Caract(0).
Donc, il me suffit de modifier le code ainsi:
chainelu est une chaine
chainelu=RegistreLit("HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesPolicyAgent",
"DependOnService")
Info(Remplace(chainelu,Caract(0),RC))

J'ai remplacé les Caract(0) par des RC et hop, là je vois toutes les données
de cette valeur.

Je pense que si les développeurs qui sont plus costauds que moi au niveau de
la gestion de la base de registres avec WD passent par là, ils pourront
peut-être te confirmer cela.

Bonne continuation.
Bernard Michel
Georges Peyre
Le #14620251
BMichel a présenté l'énoncé suivant :
Dans mon programme windev, je souhaite récupérer les données d'une valeur
du type "REG_MULTI_SZ".
Or, avec la commande RegistreLit du Wlangage, cela ne marche pas car une
instruction du genre
RegistreLit("HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesBthServ","DependOnGroup")
ne renvoi pas les valeurs de la données qui sont après le premier RC.




Il me semble que tu te trompes car la commande RegistreLit du Wlangage
permet de lire les données d'une valeur du type "REG_MULTI_SZ" dans la BDR de
Windows,.

Exemple:
Soit la clé HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesPolicyAgent
Cette clé possède (sur ma machine sous XP en tout cas), une valeur
"DependOnService" du type "REG_MULTI_SZ" et les données de cette valeur sont:
- RPCSS
- Tcpip
- IPSec

Ainsi, soit le code suivant:
chainelu est une chaine
chainelu=RegistreLit("HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesPolicyAgent",
"DependOnService")
info(chainelu)

Dans cette situation, c'est vrai que j'obtiens "RPCSS" et que je ne vois pas
les autres données de cette valeur qui sont "Tcpip" et "IPSec".
Mais c'est normal car les données de la valeur sont séparées par Caract(0).
Donc, il me suffit de modifier le code ainsi:
chainelu est une chaine
chainelu=RegistreLit("HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesPolicyAgent",
"DependOnService")
Info(Remplace(chainelu,Caract(0),RC))

J'ai remplacé les Caract(0) par des RC et hop, là je vois toutes les données
de cette valeur.

Je pense que si les développeurs qui sont plus costauds que moi au niveau de
la gestion de la base de registres avec WD passent par là, ils pourront
peut-être te confirmer cela.



Ta solution est séduisante par sa simplicité plutôt que d'utiliser une
API.
Mais est-ce qu'elle est aussi valable en ecriture avec RegistreEcrit
sous la forme de donnée suivante par exemple :

MaDonnee est une chaine =
"RPCSS"+caract(0)+"Tcpip"+caract(0)+IPSec+caract(0)
sKey =
"HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesPolicyAgent"
RegistreEcrit(sKey,"DependOnService",MaDonnee)

Cordialement






--
Elle est pas belle la vie ?
Publicité
Poster une réponse
Anonyme