[VBA] Lire une valeur DWORD de la base de registre

Le
HD
Bonjour,

Je cherche à lire la valeur d'un DWORD dans la base de registre. Il
s'agit de la valeur "Release" de la clé "HKLMSOFTWAREMicrosoftNET
Framework SetupNDPv4Full".

D'un script que j'ai récupéré j'arrive à extraire une donnée mais
cela ne fonctionne que pour les valeurs de chaîne qui sont en texte. Du
coup, la valeur est "convertie" en string et m'affiche "" là où je
devrais avoir la valeur décimale "394271".

Voilà mon script :
--
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias
"RegQueryValueExA" ( _
ByVal hKey As Long, _
ByVal lpValueName As String, _
ByVal lpReserved As Long, _
lpType As Long, _
ByVal lpData As String, _
lpcbData As Long) As Long

Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias
"RegOpenKeyExA" ( _
ByVal hKey As Long, _
ByVal lpSubKey As String, _
ByVal ulOptions As Long, _
ByVal samDesired As Long, _
phkResult As Long) As Long

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As
Long) As Long

Private Sub Form_Load()
On Error Resume Next
Const HKEY_LOCAL_MACHINE = &H80000002
Const KEY_QUERY_VALUE = &H1
Const REG_SZ = 1
Const strKey = "SOFTWAREMicrosoftNET Framework SetupNDPv4Full"
Const strValueName = "Release"
Dim lngSizeData As Long
Dim strData As String
Dim hKey As Long

strData = Space(255)
RegOpenKeyEx HKEY_LOCAL_MACHINE, strKey, 0&, KEY_QUERY_VALUE, hKey
RegQueryValueEx hKey, strValueName, 0&, REG_SZ, ByVal strData,
Len(strData)
RegCloseKey hKey
strData = Left(strData, InStr(1, strData, Chr(0)) - 1)
MsgBox strData
End Sub
--

Ce script est effictivement adapté aux valeurs texte (string) mais non
aux valeurs numériques. J'ai fait plusieurs essais mais je n'ai pas
trouvé comment corriger mon script pour avoir la bonne valeur.

Cordialement,

@+
HD
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
JièL
Le #26443676
Hello,
amusant, je ne connaissais pas la réponse, alors j'ai cherché et j'ai
trouvé une discussion qui date de 2008 initié par un certain HD :-)
Frédéric Sigonneau avait alors répondu qu'on pouvait éviter les API
Ca ne ferait pas l'affaire ?
https://www.generation-nt.com/reponses/vba-modifier-valeur-dword-base-registre-entraide-2847081.html
--
JièL affaire à faire
Le 04/09/2017 à 12:11, HD a écrit :
Bonjour,
Je cherche à lire la valeur d'un DWORD dans la base de registre. Il
s'agit de la valeur "Release" de la clé "HKLMSOFTWAREMicrosoftNET
Framework SetupNDPv4Full".
D'un script que j'ai récupéré j'arrive à extraire une donnée... mais
cela ne fonctionne que pour les valeurs de chaîne qui sont en texte. Du
coup, la valeur est "convertie" en string et m'affiche "" là où je
devrais avoir la valeur décimale "394271".
Voilà mon script :
--------------------------------------------
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias
"RegQueryValueExA" ( _
   ByVal hKey As Long, _
   ByVal lpValueName As String, _
   ByVal lpReserved As Long, _
   lpType As Long, _
   ByVal lpData As String, _
   lpcbData As Long) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias
"RegOpenKeyExA" ( _
   ByVal hKey As Long, _
   ByVal lpSubKey As String, _
   ByVal ulOptions As Long, _
   ByVal samDesired As Long, _
   phkResult As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As
Long) As Long
Private Sub Form_Load()
On Error Resume Next
Const HKEY_LOCAL_MACHINE = &H80000002
Const KEY_QUERY_VALUE = &H1
Const REG_SZ = 1
Const strKey = "SOFTWAREMicrosoftNET Framework SetupNDPv4Full"
Const strValueName = "Release"
Dim lngSizeData As Long
Dim strData As String
Dim hKey As Long
   strData = Space(255)
   RegOpenKeyEx HKEY_LOCAL_MACHINE, strKey, 0&, KEY_QUERY_VALUE, hKey
   RegQueryValueEx hKey, strValueName, 0&, REG_SZ, ByVal strData,
Len(strData)
   RegCloseKey hKey
   strData = Left(strData, InStr(1, strData, Chr(0)) - 1)
   MsgBox strData
End Sub
--------------------------------------------
Ce script est effictivement adapté aux valeurs texte (string) mais non
aux valeurs numériques. J'ai fait plusieurs essais mais je n'ai pas
trouvé comment corriger mon script pour avoir la bonne valeur.
Cordialement,
@+
HD
HD
Le #26443683
Oups... Effectivement. Je retombe bien sur la valeur recherchée. Merci
;-)
@+
HD
HB
Le #26443826
Le 04/09/2017 à 13:51, HD a écrit :
Oups... Effectivement. Je retombe bien sur la valeur recherchée. Merci ;-)
@+
HD

sinon, avec la méthode RegRead de l'objet shell...
C'est nettement plus simple ... et cela fonctionne de Win98 à W10 ;o)
version testée en VBS
========================================================================== Option Explicit
Dim objShell
Dim MaVal,CH
Set objShell = CreateObject("Wscript.Shell")
CH="HKLMSOFTWAREMicrosoftNET Framework SetupNDPv4FullRelease"
MaVal = objShell.RegRead(CH)
Wscript.echo "Valeur : " & MaVal
Wscript.echo "Type de variable : " & UCase(TypeName(MaVal))
Set objShell = Nothing
==========================================================================
HB
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
HD
Le #26443872
sinon, avec la méthode RegRead de l'objet shell...
C'est nettement plus simple ... et cela fonctionne de Win98 à W10 ;o)
version testée en VBS
========================================================================== > Option Explicit
Dim objShell
Dim MaVal,CH
Set objShell = CreateObject("Wscript.Shell")
CH="HKLMSOFTWAREMicrosoftNET Framework SetupNDPv4FullRelease"
MaVal = objShell.RegRead(CH)
Wscript.echo "Valeur : " & MaVal
Wscript.echo "Type de variable : " & UCase(TypeName(MaVal))
Set objShell = Nothing
==========================================================================

Effectivement, merci HB
@+
HD
Publicité
Poster une réponse
Anonyme