Lire une clé dans la base de registre. (Window 7)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Lire une clé dans la base de registre. (Window 7)

Message 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:)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Lire une clé dans la base de registre. (Window 7)

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Lire une clé dans la base de registre. (Window 7)

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Lire une clé dans la base de registre. (Window 7)

Message 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,"")
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre