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,"")