[VBA] Lire une valeur DWORD de la base de registre
4 réponses
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
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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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.
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
Oups... Effectivement. Je retombe bien sur la valeur recherchée. Merci ;-) @+ HD
Oups... Effectivement. Je retombe bien sur la valeur recherchée. Merci
;-)
Oups... Effectivement. Je retombe bien sur la valeur recherchée. Merci ;-) @+ HD
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
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
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
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
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
==========================================================================
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 ==========================================================================