[resolu] Lecture du registre récalcitrant... des fois
Publié : lun. 17/sept./2012 15:38
J'ai adapté une proce existante (je ne sais pus de qui) pour lire dans le registre, je l'ai simplifié pour ne pas avoir à séparer la clé mère (HKLM, HKCU etc) de la suite.
Si dans la majeur partie des cas elle fonctionne, il y a des cas ou elle ne marche pas et je ne comprends vraiment pas pourquoi.
L'exemple ci dessous est parlant.
Si dans la majeur partie des cas elle fonctionne, il y a des cas ou elle ne marche pas et je ne comprends vraiment pas pourquoi.
L'exemple ci dessous est parlant.
Code : Tout sélectionner
Procedure.s GetRegValue(FullKey.s,ValueName.s)
; by Ar-S
Protected.s SubKey, CleMere
If Left(FullKey,17) = "HKEY_CURRENT_USER"
CleMere = Left(FullKey,17)
OpenKey = #HKEY_CURRENT_USER
SubKey = Mid(FullKey,19,Len(FullKey)-18)
ElseIf Left(FullKey,18) = "HKEY_LOCAL_MACHINE"
CleMere = Left(FullKey,18)
OpenKey = #HKEY_LOCAL_MACHINE
SubKey = Mid(FullKey,20,Len(FullKey)-19)
ElseIf Left(FullKey,17) = "HKEY_CLASSES_ROOT"
CleMere = Left(FullKey,17)
OpenKey = #HKEY_CLASSES_ROOT
SubKey = Mid(FullKey,19,Len(FullKey)-18)
ElseIf Left(FullKey,10) = "HKEY_USERS"
CleMere = Left(FullKey,10)
OpenKey = #HKEY_USERS
SubKey = Mid(FullKey,12,Len(FullKey)-11)
ElseIf Left(FullKey,19) = "HKEY_CURRENT_CONFIG"
CleMere = Left(FullKey,19)
OpenKey = #HKEY_CURRENT_CONFIG
SubKey = Mid(FullKey,21,Len(FullKey)-20)
EndIf
hKey.l = 0
KeyValue.s = Space (255)
DataSize.l = 255
If RegOpenKeyEx_ (OpenKey,SubKey,0, #KEY_READ ,@hKey)
KeyValue= ""
Else
If RegQueryValueEx_ (hKey,ValueName,0,0,@KeyValue,@DataSize)
KeyValue= ""
Else
KeyValue= Left (KeyValue,DataSize-1)
EndIf
RegCloseKey_ (hKey)
EndIf
ProcedureReturn KeyValue
EndProcedure
; Marche
Key.s = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
Debug "Result : " + GetRegValue(Key, "ProductName")
; Ne marche pas
Key2.s = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winsat"
Debug "Result : " + GetRegValue(Key2, "PrimaryAdapterString")