OVH Cloud OVH Cloud

Extraction de données de la BR vers un .txt

2 réponses
Avatar
Alex917
Bonjour,
Je souhaite extraire des informations contenues dans la=20
Base de registre, et les envoyer automatiquement dans=20
un .txt, de fa=E7on =E0 pouvoir lire ces informations sans=20
risque de les modifier accidentellement. Notament dans=20
HKEY_LOCAL_MACHINE (software et harware). J'ai du mal =E0=20
bien exploiter la commande 'RegEnumKeyEx'
Merci d'avance.

2 réponses

Avatar
ng
Salut,

Voici un exemple :
Const ERROR_NO_MORE_ITEMS = 259&
Const HKEY_CURRENT_CONFIG = &H80000005
Const HKEY_LOCAL_MACHINE = &H80000002
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long)
As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA"
(ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias
"RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As
String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String,
lpcbClass As Long, lpftLastWriteTime As Any) As Long
Private Declare Function RegEnumValue Lib "advapi32.dll" Alias
"RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal
lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long,
lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Sub Form_Load()
'KPD-Team 2001
'URL: http://www.allapi.net/
'E-Mail:
Dim hKey As Long, Cnt As Long, sName As String, sData As String, Ret As
Long, RetData As Long
Const BUFFER_SIZE As Long = 255
'Set the forms graphics mode to persistent
Me.AutoRedraw = True
Me.Print "RegEnumKeyEx"
Ret = BUFFER_SIZE
'Open the registry key
If RegOpenKey(HKEY_LOCAL_MACHINE, "Hardware", hKey) = 0 Then
'Create a buffer
sName = Space(BUFFER_SIZE)
'Enumerate the keys
While RegEnumKeyEx(hKey, Cnt, sName, Ret, ByVal 0&, vbNullString,
ByVal 0&, ByVal 0&) <> ERROR_NO_MORE_ITEMS
'Show the enumerated key
Me.Print " " + Left$(sName, Ret)
'prepare for the next key
Cnt = Cnt + 1
sName = Space(BUFFER_SIZE)
Ret = BUFFER_SIZE
Wend
'close the registry key
RegCloseKey hKey
Else
Me.Print " Error while calling RegOpenKey"
End If
Me.Print vbCrLf + "RegEnumValue"
Cnt = 0
'Open a registry key
If RegOpenKey(HKEY_LOCAL_MACHINE,
"SoftwareMicrosoftWindowsCurrentVersion", hKey) = 0 Then
'initialize
sName = Space(BUFFER_SIZE)
sData = Space(BUFFER_SIZE)
Ret = BUFFER_SIZE
RetData = BUFFER_SIZE
'enumerate the values
While RegEnumValue(hKey, Cnt, sName, Ret, 0, ByVal 0&, ByVal sData,
RetData) <> ERROR_NO_MORE_ITEMS
'show data
If RetData > 0 Then Me.Print " " + Left$(sName, Ret) + "=" +
Left$(sData, RetData - 1)
'prepare for next value
Cnt = Cnt + 1
sName = Space(BUFFER_SIZE)
sData = Space(BUFFER_SIZE)
Ret = BUFFER_SIZE
RetData = BUFFER_SIZE
Wend
'Close the registry key
RegCloseKey hKey
Else
Me.Print " Error while calling RegOpenKey"
End If
End Sub


--
Nicolas.
http://www.ngsoft-fr.com
"Alex917" a écrit dans le message de news:
057601c3de77$cd3a2440$
Bonjour,
Je souhaite extraire des informations contenues dans la
Base de registre, et les envoyer automatiquement dans
un .txt, de façon à pouvoir lire ces informations sans
risque de les modifier accidentellement. Notament dans
HKEY_LOCAL_MACHINE (software et harware). J'ai du mal à
bien exploiter la commande 'RegEnumKeyEx'
Merci d'avance.
Avatar
Merci beaucoup pour l'exemple. En plus j'utilisait mal
également la 'RegEnumValue'.
Juste un détail, il m'affiche un message d'erreur pour
cette ligne " While RegEnumKeyEx(hKey, Cnt, sName, Ret,
ByVal 0&, vbNullString, ByVal 0&, ByVal 0&) <>
ERROR_NO_MORE_ITEMS " : convention d'appel de dll
incorecte. J'ai regardé l'aide en ligne, mais je n'ai pas
su rectifier cette commande.
Sinon le programme fonctionne parfaitement.
Merci