[VB] lire les cles de la base de registre

Résolu/Fermé
madustbin - 24 mars 2005 à 00:15
 Abdellah - 28 févr. 2010 à 12:48
Bonjour.

Je suis nouveau, j'ai fais une recherche infructueuse, alors si la reponse se trouve deja sur le forum (voir plusieurs fois), veuillez me pardonner.

Je connais une partie d'une clé dans la base de registre(BdR) et je voudrais pouvoir la lire.
Pour cela, 2 moyens :
1. acces direct - auquel cas il me faudrais connaitre la cle en entier. Elle est constitue de l'ID utilisateur. Et je ne sais pas ou je peux recuperer cette information. Par programme VB evidemment et non en lisant la BdR avec Regedit)
2. Acces sequentiel - je pourrais comparer chaque cle et voir celle qui contient la partie de la cle que je connais. Mais je ne sais pas comment faire cela avec vb6

Si quelqu'un pouvait m'eclairer, cela serait sympa.

exemple de la cle que je recherche :

HKEY_USERS\ID_utilisateur_Classes\CLSID\Programme
où ID_utilisateur a cette forme: S-1-1-11-123456789-123456789-123456789-1234
et correspond a la partie de la cle que je ne connais pas
A voir également:

9 réponses

aldo13 Messages postés 489 Date d'inscription lundi 24 janvier 2005 Statut Membre Dernière intervention 28 avril 2005 103
25 mars 2005 à 00:38
bon un exemple vite trouvé sur google ,
par contre c EnumKey et non EnumKeys , la

'enumkeys.vbs - recursively list the names of all
'keys under HKLM\SOFTWARE
Option Explicit
Dim refRegistry
Const HKEY_LOCAL_MACHINE = &H80000002

Set refRegistry = getobject("winmgmts:root\default:stdregprov")

Enumerate "SOFTWARE\Microsoft",refRegistry,0

Set refRegistry = Nothing

'recursive subroutine call
Sub Enumerate(strKey,refRegistry,numLevel)
Dim arrSubKeys
Dim strSubKey
Dim strIndent
Dim i
'prefix output with correct indentation level
strIndent = ""
For i = 0 To numLevel
strIndent = strIndent + " "
Next

'display output
WScript.Echo strIndent & strKey
'enumerate any subkeys
If refRegistry.EnumKey( _
HKEY_LOCAL_MACHINE, strKey, arrSubKeys) = 0 Then
For Each strSubKey In arrSubKeys
'recursively call ourselves
Enumerate strKey & "\" & strSubKey, refRegistry, numLevel + 1
Next
Else
WScript.Echo "Unable to enumerate. Sorry."
WScript.Quit
End If
End Sub
2
Utilisateur anonyme
25 mars 2005 à 00:55
Bien,

voilà un exemple assez complet :-)

Lupin
0
Utilisateur anonyme
24 mars 2005 à 00:39
Bonjour,

Tous ces objets font partie des GPO (group policy objects)
vous n'avez qu'a chercher de ce côté. Tous le code VBS est importable sous VB, toute fois un petit malin a fait un malheur avec ces outils !!!

"je vous aime" pour ne pas le nommer !

Lupin
0
Je crois qu'il a une classe en vb net qui permet d'accéder facilement aux base de registres windows (lister les clés, lires les valeurs,changer au supprimer les valeurs). mais il faut d'abord importer l'espace de nom suivant :
Microsoft.Win32.
0
merci pour ta reponse.

Je viens de passer 45minutes a essayer de trouver :
GPO - trop de reponses auquelles je ne comprends rien et qui ne semnlent pas me concerner
GPO REGISTRE - 4 reponses sans apport interessant
"JE VOUS AIME" beaucoup de reponse mais pas d'utilisateur avec ce nom
Grosse recherche sur le forum pour trouver la liste des membres pour voir les messages de ce "Je vous aime". Rien trouve.

Bref, une grosse deprime qui m'envoie au lit.

A+
0
Utilisateur anonyme
24 mars 2005 à 12:43
re:

voici un lien !

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/wsmthregread.asp

en fait le "je vous aime" doit être traduit en anglais !

Lupin
0
merci pour le lien.

C'est la methode que j'utilise actuellement.

Elle permet de lire une cle ......quand on connait la cle !!!

Moi je ne connais pas la cle en entier. Je veux donc parcourir la base de registre pour comparer les cles et m'arreter a celle qui aura la partie de la cle que je connais.

A moins que j'ai mal compris le contenu du lien (lu 2 fois par acquis de conscience), il ne m'apporte rien.

Merci pour les autres idees.

La lecture sequentielle de la base de registre doit bien etre faisable, non ?

et comme certains logiels arrivent a creer des cles avec l'ID utilisateur, je dois bien pouvoir le faire aussi, non ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
24 mars 2005 à 19:17
re :

sous la clé :
[HKEY_CURRENT_USER\Software\Microsoft\Protected Storage System Provider]

tu trouveras le ID du user. N'oubli pas que le HKCU et une copie
ou un racourci vers HKU...

de même HKCC est une "copie", un raccourci vers HKLM...

bon, c'est pas évident si tu n'as pas de notion de "active directory", mais en lançant gpedit.msc, tu devrais trouver plusieurs clé du registre en modifiant les valeurs dans la partie "configuration utilisateur".

tu effectue une modif et ensuite tu compare les ruches de la BDR.
il exite plusieurs commandes dos permettant ce genre de manip.

est-ce que cela t'en dit un peu plus, je ne puis détailler ici tous les détails de la BDR.

l'idée de lire de façon séquentiel m'apparait fastidieux, toutes les informations recherché son dans le registre, il ne suffit que de connaitre quelques clés de base qui te donnerons les chemins vers d'autres clés.

Lupin
0
Utilisateur anonyme
24 mars 2005 à 20:16
re :

d'autres info !

donc le premier lien était pour lire/écrire dans le registre !

voici un autre liens qui te permettra d'installer :
GroupPolicyCommonScenarios.msi

que tu trouveras ici :
http://www.microsoft.com/downloads/details.aspx?FamilyID=354b9f45-8aa6-4775-9208-c681a7043292&DisplayLang=en

ce sont des exemples de scénarios pour les GPOs.
c'est plutôt complexe, mais les réponses que tu cherches
sont bel et bien là.

à partir du %username% tu peux tout retracer dans le registre.
je n'ai fait à ce jour que de petit exercice simple du style de
changer le papier peint du bureau de windows pour un user qui
ne s'est pas encore logger en mofifiant le [.default] de HKU.

bon, ça devrais to donner une bonne piste :-)
du moins je l'espère !

Lupin
0
aldo13 Messages postés 489 Date d'inscription lundi 24 janvier 2005 Statut Membre Dernière intervention 28 avril 2005 103
24 mars 2005 à 20:53
Salut ,

Tu as essayé avec EnumKeys , par exemple ?
0
oui j'ai bien remarque que sous la cle :
[HKEY_CURRENT_USER\Software\Microsoft\Protected Storage System Provider]
il y a la sous cle contenant l'information que je souhaite.

Mais je n'arrive pas a la lire !!!

voici mon source :
Option Explicit
Private Sub Form_Load()
Dim shellBdR As New WshShell
Dim txtCle As String

txtCle = shellBdR.RegRead("HKCU\Software\Microsoft\Protected Storage System Provider")

MsgBox (txtCle)
End Sub


Comme cette ID utilisateur est une sous-cle, vb me repond qu'il ne trouve pas le fichier.

Mais je sens qu'on est sur la bonne voie.

quant à EnumKeys, non je ne connais pas. si tu veux bien m'en dire un peux plus.
0
Utilisateur anonyme
25 mars 2005 à 00:52
Bonsoir,

oula, voila une question de programmation !

voici donc mon opinion de façon critique :-o

ne jamais utiliser une action sur le registre pendant un "formload"
bon disons que c'est pour l'exemple :)

les types pour les variables de type objet en VBS est toujours "Variant", et ce même sous VB ou VBA.

il faut toujours instancié l'objet [Set]

Il te faudra aussi tenir compte des droits utilisateurs de ton exécutable! certaines clés ne sont accessible que par l'administrateur. Et bien sur l'arrêt/départ de certains services.

et quel est le but de tout ça ?

Private Sub Form_Load()
Dim shellBdR As Variant
Dim txtCle As String

Set shellBdR = WScript.CreateObject("WScript.Shell")

txtCle = shellBdR.RegRead("HKCU\Software\Microsoft\Protected Storage System Provider")

MsgBox (txtCle)
End Sub

Lupin
0
Merci des efforts que vous avez fait pour m'aidez.

A force de recherche, j'ai trouve le projet d'un ingenieur qui faisait - entre autres - ce que je recherchait.
Ca m'a pris 3 heures pour l'epurer et n'en garder que l'essentiel.
Du coup ca n'est pas aussi propre que son programme mais c'est nettement plus concis. Je le mets pour le cas ou quelqu'un en aurait besoin.

-----------------------------------------------

Option Explicit

Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hkey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName 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 Sub Form_Load()
Const VBREG_HKEY_CURRENT_USER As Long = &H80000001
Const SousCle As String = "Software\Microsoft\Protected Storage System Provider"
Const VBREG_KEY_ENUMERATE_SUB_KEYS As Long = &H8
Dim STR_name As String
Dim last_key_open As Long
Dim Resultat As Long
Dim TheGoodOne As String

Resultat = RegOpenKeyEx(VBREG_HKEY_CURRENT_USER, SousCle, 0&, ByVal VBREG_KEY_ENUMERATE_SUB_KEYS, last_key_open)

STR_name = String(513, Chr$(0))
Resultat = RegEnumKey(last_key_open, 0, ByVal STR_name, 512)
TheGoodOne = Left$(STR_name, InStr(1, STR_name, Chr$(0)) - 1)

MsgBox (TheGoodOne)
End
End Sub

--------------------------------

ps: form_load pour l'exemple evidemment ! :)

re ps : le source que tu viens de mettre ne me donne pas ce resultat. Il ne fonctionne que lorsque la cle est complete.

re re ps : ENCORE MERCI DE VOTRE AIDE!
0