Rechercher : dans
Par :

[VB] lire les cles de la base de registre

Dernière réponse le 25 mar 2005 à 04:02:54 madustbin, le 24 mar 2005 à 00:15:26 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « [VB] lire les cles de la base de registre » dans :
[Windows XP] Structure de la base de registre VoirQu'est-ce que la base de registre ? Accéder à la base de registre Comprendre son interface Colonne de gauche Les 5 clés racines Colonne de droite Quelques fonctionnalités du registre Exportation (sauvegarde d'une clé du registre) Recherche...
[Windows] Nettoyer la base de registre avec RegCleaner VoirLa plupart des applications stockent des données de configuration dans la base de registre car il s'agit d'un espace de stockage de données facile à gérer et commun à tous les systèmes Microsoft Windows. Néanmoins, beaucoup d'entre-elles laissent...
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Télécharger Visual Basic 6 Runtime (VB6 DLL) VoirLe Runtime Visual Basic 6 contient l'ensemble des librairies (DLL) nécessaires pour exécuter des programmes écrits en langage Visual Basic 6.0. Il contient notamment les DLL suivantes :...
Microsoft Windows - La base de registres VoirQu'est-ce que la base de registres Dans la version 3.1 de Microsoft Windows, les applications installées étaient configurées vis-à-vis de Windows grâce à des fichiers de configuration (dont l'extension était .ini). D'autre part, deux fichiers de...
Introduction à Visual Basic VoirPrésentation de Visual Basic Visual Basic est un outil développé par Microsoft pour développer facilement des applications fonctionnant sous Microsoft Windows ©. Visual Basic est, comme son nom l'indique, un outil visuel permettant de créer...

1

Lupin.Arsene, le 24 mar 2005 à 00:39:10

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
~L'essentiel est invisible pour les yeux~
~On ne voit bien qu'avec le coeur~

Répondre à Lupin.Arsene

2

madustbin, le 24 mar 2005 à 01:31:30

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+

Répondre à madustbin

3

Lupin.Arsene, le 24 mar 2005 à 12:43:14

Re:

voici un lien !

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

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

Lupin
~L'essentiel est invisible pour les yeux~
~On ne voit bien qu'avec le coeur~

Répondre à Lupin.Arsene

4

madustbin, le 24 mar 2005 à 18:58:51

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 ?

Répondre à madustbin

5

Lupin.Arsene, le 24 mar 2005 à 19:17:22

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
~L'essentiel est invisible pour les yeux~
~On ne voit bien qu'avec le coeur~

Répondre à Lupin.Arsene

6

Lupin.Arsene, le 24 mar 2005 à 20:16:19

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
~L'essentiel est invisible pour les yeux~
~On ne voit bien qu'avec le coeur~

Répondre à Lupin.Arsene

7

aldo13, le 24 mar 2005 à 20:53:45

Salut ,

Tu as essayé avec EnumKeys , par exemple ?

Répondre à aldo13

8

madustbin, le 25 mar 2005 à 00:08:34

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.

Répondre à madustbin

9

aldo13, le 25 mar 2005 à 00:38:14

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

Répondre à aldo13

11

Lupin.Arsene, le 25 mar 2005 à 00:55:30

Bien,

voilà un exemple assez complet :-)

Lupin
~L'essentiel est invisible pour les yeux~
~On ne voit bien qu'avec le coeur~

Répondre à Lupin.Arsene

10

Lupin.Arsene, le 25 mar 2005 à 00:52:23

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
~L'essentiel est invisible pour les yeux~
~On ne voit bien qu'avec le coeur~

Répondre à Lupin.Arsene

12

 madustbin, le 25 mar 2005 à 04:02:54

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!

Répondre à madustbin