Page 1 sur 1
Lire une clé dans la base de registre. (Window 7)
Publié : mar. 25/sept./2012 22:23
par falsam
je dois être aveugle ou j'utilise mal les mots clés dans la recherche.
Je cherche un code plus récent pour lire une base de registre. Ceux que je trouve, par exemple celle de Dobro :p, ne fonctionne pas sous windows 7 me retournant toujours la valeur 0.
Merci d'avance:)
Re: Lire une clé dans la base de registre. (Window 7)
Publié : mer. 26/sept./2012 0:06
par GallyHC
Bonjour,
Voila ce que j'utilise pour un soft "Tomtomax Maxi-Box" pour lire des clefs de registre et qui fonctionne sur xp, vista, seven.
Code : Tout sélectionner
Procedure.s ReadRegKey(OpenKey.l,SubKey.s,ValueName.s)
; ROUTINE DE LECTURE DE CLEF DE REGISTRE.
Define hKey.l = 0
Define DataSize.l = 255
Define KeyValue.s = Space(DataSize)
If Left(SubKey, 1) = "\"
SubKey = Right(SubKey, Len(SubKey) - 1)
EndIf
If RegOpenKeyEx_(OpenKey, SubKey, 0, #KEY_READ, @hKey)
KeyValue = #NULL$
Else
If RegQueryValueEx_(hKey, ValueName, 0, 0, @KeyValue, @DataSize)
KeyValue = #NULL$
Else
KeyValue = Left(KeyValue, DataSize - 1)
EndIf
RegCloseKey_(hKey)
EndIf
ProcedureReturn KeyValue
EndProcedure
Debug LCase(ReadRegKey(#HKEY_LOCAL_MACHINE, "SOFTWARE\TomTom\TomTom HOME", "path"))
la clef est un exemple pour avoir le path de "tomtom home".
Codialement,
GallyHC
Re: Lire une clé dans la base de registre. (Window 7)
Publié : mer. 26/sept./2012 0:18
par falsam
Merci GallyHC, Ta procédure fonctionne pour des valeur de type chaine de caractéres, mais ne fonctionne pas pour des valeurs de type hexadécimal ou décimal.
Exemple
Code : Tout sélectionner
Debug ReadRegKey(#HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\explorer\Advanced", "HideFileExt")
Par défaut la valeur est à 1.
Re: Lire une clé dans la base de registre. (Window 7)
Publié : mer. 26/sept./2012 0:29
par falsam
Voila une solution qui fonctionne.
Code : Tout sélectionner
; Lire une chaine dans le registre
Procedure.s RegReadKey(TopKey.l, KeyName.s, ValueName.s, Type.l, ComputerName.s)
Protected Error.l, hKey.l, lReturnCode.l, lhRemoteRegistry.l, BufferSize, Value.q, Result.s
If ComputerName = ""
Error = RegOpenKeyEx_(TopKey, KeyName, 0, #KEY_READ, @hKey)
Else
lReturnCode = RegConnectRegistry_(ComputerName, topKey, @lhRemoteRegistry)
Error = RegOpenKeyEx_(lhRemoteRegistry, KeyName, 0, #KEY_READ, @hKey)
EndIf
If Error = #ERROR_SUCCESS
RegQueryValueEx_(hKey, ValueName, 0, @type, 0, @BufferSize)
Select Type
Case #REG_SZ,#REG_EXPAND_SZ
If bufferSize
value = AllocateMemory(buffersize)
If value
Error = RegQueryValueEx_(hKey, ValueName, 0, 0, Value, @BufferSize)
If Error = #ERROR_SUCCESS
Result = PeekS(value)
EndIf
FreeMemory(value)
Else
Error = #ERROR_NOT_ENOUGH_MEMORY
EndIf
EndIf
Case #REG_DWORD, #REG_QWORD
Error = RegQueryValueEx_ (hKey, ValueName, 0, 0 , @Value, @BufferSize)
If Error = #ERROR_SUCCESS
Result = Str(Value)
EndIf
EndSelect
RegCloseKey_(hkey)
EndIf
ProcedureReturn Result
EndProcedure
Global TopKey.l = #HKEY_CURRENT_USER
Global KeyName.s = "Software\Microsoft\Windows\CurrentVersion\explorer\Advanced"
Debug RegReadKey(TopKey, KeyName, "HideFileExt",#REG_DWORD,"") ;Extension des fichiers caché ou pas 1 ou 0
KeyName = "Control Panel\Desktop"
Debug RegReadKey(TopKey, KeyName, "Wallpaper",#REG_SZ,"")