|
RegistreEcrit et valeur dword |
Iniciado por guest, set., 25 2005 10:36 AM - 4 respostas |
| |
| | | |
|
| |
Publicado em setembro, 25 2005 - 10:36 AM |
Bonjour,
Je butte depuis plusieurs jours sur le problème suivant : Je dois écrire dans la base de registre une information précise, dans une clé, à une valeur précise. La valeur est de type dword "Height"=dword:0000005a
Or, si j'utilise la fonction RegistreEcrit disponible dans le WDlangage, je peux écrire dans une clé à une valeur soit du texte "blabla", soit un entier 123456 mais comment écrire de l'hexadécimal, tel que l'information à la valeur spécifiée soit : DWORD (REG_DWORD) ?
A vous lire pour me sortir de ce mauvais pas.
Fabrice. |
| |
| |
| | | |
|
| | |
| |
Publicado em setembro, 26 2005 - 2:29 PM |
Bonjour,
Voici le code nécessaire pour écrire des données sous leur forme binaire dans la base de registre.
HKEY_CURRENT_USER est un entier long = 0x80000001 // adresse fixe de la clé prédéfinie
// Valeur des type d'accès à la clé
KEY_QUERY_VALUE est un entier long = 0x1
KEY_SET_VALUE est un entier long = 0x2
KEY_CREATE_SUB_KEY est un entier long = 0x4
KEY_ENUMERATE_SUB_KEYS est un entier long = 0x8
KEY_NOTIFY est un entier long = 0x10
KEY_CREATE_LINK est un entier long = 0x20
KEY_ALL_ACCESS est un entier long = KEY_QUERY_VALUE+KEY_ENUMERATE_SUB_KEYS+KEY_NOTIFY+KEY_CREATE_SUB_KEY+...
KEY_CREATE_LINK+KEY_SET_VALUE
// Type de la valeur manipulée
REG_BINARY est un entier long = 3
// Chemin de la clé contenant la valeur
REG_APP_KEYS_PATH est une chaine asciiz sur 255 = "SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\"
lResult est un entier // Résultat des appels API
dwResult est un entier long // Handle de la clé
ValueName est une chaine asciiz sur 50 = "EnableAutodial"+caract(0) // Nom de la valeur
dwType est un entier long = REG_BINARY // Type de la valeur
ch est une chaine asciiz sur 4 // Buffer contenant la valeur
cbSize est un entier long = 4 // Taille du buffer
// Compteur de boucle
ii est un entier
// Variable temporaire
VarTemp est une chaine
// Ouverture de la clé
lResult = appeldll32("AdvApi32","RegOpenKeyExA",HKEY_CURRENT_USER,...
®_APP_KEYS_PATH, ....
0,...
KEY_ALL_ACCESS,...
&dwResult)
si lResult<>0 alors
erreur("Clé non ouverte.")
retour
FIN
// Lecture de la valeur
si appeldll32("AdvApi32","RegQueryValueExA", dwResult,...
&ValueName,...
null,...
&dwType,...
&ch,...
&cbSize) <> 0
erreur("Valeur de "+ValueName+" non lue.")
// Fermeture de la clé
appeldll32("AdvApi32","RegCloseKey",dwResult)
retour
fin
// Traitement/Affichage de la valeur en "texte": pour vérifier
VarTemp = ""
Pour ii = 1 à 4
VarTemp += numeriqueverschaine(asc(ch[[ii]]),"%02X") + caract(32)
FIN
info("Valeur lue de "+ValueName+": "+VarTemp)
// Modif de la valeur: on met 1
ch=caract(1)+caract(0)+caract(0)+caract(0)
si appeldll32("AdvApi32","RegSetValueExA", dwResult,...
&ValueName,...
Null,...
dwType,...
&ch,...
cbSize) <> 0
erreur("Valeur de "+ValueName+" non modifiée.")
// Fermeture de la clé
appeldll32("AdvApi32","RegCloseKey",dwResult)
retour
fin
// ReLecture de la valeur
ch=""
si appeldll32("AdvApi32","RegQueryValueExA", dwResult,...
&ValueName,...
null,...
&dwType,...
&ch,...
&cbSize) <> 0
erreur("Valeur de "+ValueName+" non lue.")
// Fermeture de la clé
appeldll32("AdvApi32","RegCloseKey",dwResult)
retour
fin
// Traitement/Affichage de la valeur en "texte"
VarTemp = ""
Pour ii = 1 à 4
VarTemp += numeriqueverschaine(asc(ch[[ii]]),"%02X") + caract(32)
FIN
info("Valeur lue de "+ValueName+": "+VarTemp)
// Fermeture de la clé
appeldll32("AdvApi32","RegCloseKey",dwResult)
-- Ed en Ligne
"Fabrice" <guest@newsgroup.fr> a écrit dans le message de news: 43364cd6$1@news.pcsoft.fr...
Bonjour,
Je butte depuis plusieurs jours sur le problème suivant : Je dois écrire dans la base de registre une information précise, dans une clé, à une valeur précise. La valeur est de type dword "Height"=dword:0000005a
Or, si j'utilise la fonction RegistreEcrit disponible dans le WDlangage, je peux écrire dans une clé à une valeur soit du texte "blabla", soit un entier 123456 mais comment écrire de l'hexadécimal, tel que l'information à la valeur spécifiée soit : DWORD (REG_DWORD) ?
A vous lire pour me sortir de ce mauvais pas.
Fabrice.
|
| |
| |
| | | |
|
| | |
| |
Publicado em setembro, 26 2005 - 3:37 PM |
Bonjour,
Merci pour votre aide. La solution est bien lourde pour un si petit problème. Je pense que la solution d'importer un .REG est beaucoup plus simple à mettre en oeuvre ... Dommage qu'il n'y ai pas d'option pour écrire des DWORD (ou autre) via RegistreEcrit en WDLangage. Un évolution pour une futur version.
Encore merci pour m'avoir dépanné.
Cordialement,
Fabrice. |
| |
| |
| | | |
|
| | |
| |
Publicado em setembro, 26 2005 - 10:17 PM |
BOnjour,
Je butte depuis plusieurs jours sur le problème suivant : Je dois écrire dans la base de registre une information précise, dans une clé, à une valeur précise. La valeur est de type dword "Height"=dword:0000005a
Or, si j'utilise la fonction RegistreEcrit disponible dans le WDlangage, je peux écrire dans une clé à une valeur soit du texte "blabla", soit un entier 123456 mais comment écrire de l'hexadécimal, tel que l'information à la valeur spécifiée soit : DWORD (REG_DWORD) ?
Pour ecrire un DWORD il suffit de faire
iHeight est un entier = 0x5a // Par exemple bien sur RegitstreEcrit(cNomClé,cNomVal,iHeight)
Et WD ecrit automatique un REG_DWORD (pas valable pour les QWORD par contre) du fait que iHeight est typé en DWORD ici. Ce n'est pas un hexa (mais un chiffre binaire sur 4 octets), mais le valeur affichée dans "regedit" le sera elle.
Amicalement
-- Francis MOREL http://wdmlist.free.fr |
| |
| |
| | | |
|
| | |
| |
Publicado em setembro, 27 2005 - 12:53 PM |
Merci,
Cette solution bien plus souple me convient parfaitement.
Cordialement,
Fabrice. |
| |
| |
| | | |
|
| | | | |
| | |
|