Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

4 réponses
Avatar
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é "HKLM\SOFTWARE\Microsoft\NET
Framework Setup\NDP\v4\Full".

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 = "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full"
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

4 réponses

Avatar
JièL
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
Avatar
HD
Oups... Effectivement. Je retombe bien sur la valeur recherchée. Merci
;-)
@+
HD
Avatar
HB
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
Avatar
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
==========================================================================

Effectivement, merci HB
@+
HD