|
Site |
Cours VB.net |
x |
|
|
Utiliser le registre. |
|
Le Registre est un fichier de stockage des informations relatives aux applications, aux utilisateurs et aux paramètres système. Les applications peuvent utiliser le Registre pour stocker les informations à conserver après leur fermeture et accéder à ces mêmes informations après leur rechargement. On peut stocker les paramètres de taille, couleur, les positions d'affichage ou la taille de la fenêtre. Vous pouvez contrôler ces paramètres pour chaque utilisateur en stockant les informations qui lui correspondent à un emplacement différent du Registre.
Le dictionnaire de l'informatique Microsoft (Microsoft Computer Dictionary, cinquième édition), définit le Registre :voir Informations Microsoft sur le registre
On peut modifier directement le registre 'à la main' en lançant le logiciel Regedit mais un programme VB peut aller écrire ou lire dans le registre.
Le registre est composé de Clé, sous-clé et valeur. (une valeur a 'un nom de valeur' et une valeur); cela forme une arborescence.
Une clé donnée peut avoir des sous-clés. Chaque clé peut également avoir plusieurs valeurs qui servent à stocker les informations relatives à l'application qui vous intéresse. Chaque valeur contient des informations spécifiques qui peuvent être extraites ou mises à jour (noms de valeur et valeurs).
Vous remarquerez que les informations stockées dans le Registre sont accessibles aux autres applications et utilisateurs, aussi il est fortement déconseillé d'y mettre des codes d'accès.
Microsoft nous donne les Clés de base, (elles sont en lecture seule) Les clés de base sont le premier niveau de l'arborescence des clés:
CurrentUser
Stocke les informations relatives aux préférences de l'utilisateur.
LocalMachine
Stocke les informations de configuration pour l'ordinateur local.
ClassesRoot
Stocke les informations relatives aux types (et classes) et à leurs propriétés.
Users
Stocke les informations relatives à la configuration utilisateur par défaut.
PerformanceData
Stocke les informations relatives aux performances pour les composants
logiciels.
CurrentConfig
Stocke les informations concernant le matériel qui ne sont pas spécifiques à
l'utilisateur.
DynData
Stocke les données dynamiques.
Pour voir les clés de base et l'arborescence des clés exécutons 'Regedit':
Menu 'Démarrer'-> menu 'Exécuter' taper 'Regedit'
On voit ici les 2 premières clés de base HKEY_CLASSES_ROOT et HKEY_CURRENT_USER, on a développé les sous-clés de HKEY_CURRENT_USER qui sont 'AppEvents', 'AutoSetup'..., "Noms". La sous-clé 'Noms' à un nom de valeur nommé 'Nom' qui contient la valeur 'Philippe'.
Pour des raisons de sécurité, il est
préférable d'écrire des données dans le dossier utilisateur (Microsoft.Win32.Registry.CurrentUser)
plutôt que sur l'ordinateur local (Microsoft.Win32.Registry.LocalMachine).
Attention, c'est très
dangereux de modifier des clés de registre: une erreur sur une clé important et
une application ou Windows plante!!
L'auteur de ce cours décline toute responsabilité.... .... .... ....bla bla bla
Comment ça marche?
L'objet RegistryKey représente un nœud de niveau clé dans le Registre
On instance un noeud:
Dim key As Microsoft.Win32.RegistryKey
La classe Registry fourni les Clés de base (CurrentUser, LocalMachine, ClassesRoot, Users, CurrentConfig...)
On met par exemple dans key le noeud CurrentUser:
key = Microsoft.Win32.Registry.CurrentUser
Ensuite on peut:
Créer une sous-clé avec .CreateSubKeyOuvrir une sous-clé avec .OpenSubKeyEcrire ou lire une valeur avec .GetValue ou .SetValueEffacer une valeur avec .DeleteValue
Création d'une Key, écriture de valeur.
Cet exemple ajoute le nom de valeur "Nom" et la valeur "Philippe" au Registre de l'utilisateur en cours.
Cela sous la clé "Noms" dans HKEY_CURRENT_USER du Registre.
Exemple
Dim key As Microsoft.Win32.RegistryKey
key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Noms")
key.SetValue("Nom", "Philippe")
Pour voir dans le registre le résultat:
Menu 'Démarrer'-> menu 'Exécuter' taper 'Regedit'
on obtient dans le registre:
Lecture de valeur.
Dim key As Microsoft.Win32.RegistryKey
key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Noms")
Dim name As String = CType(key.GetValue("Nom"), String)
La méthode GetValue retourne un
Object. Si votre code comporte
Option Strict On,
vous devez effectuer un cast de la valeur de retour vers le type de données que
vous avez placé précédemment dans la valeur.
GetValue retourne Nothing si la valeur n'existe pas.
Supprimer la Key
Dim key As Microsoft.Win32.RegistryKey
key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Noms", True)
key.DeleteValue("Nom")
Lorsque vous changez le paramètre True
par False, la clé est accessible en lecture seule et vous ne pouvez pas
la supprimer à l'aide de la variable
key.
Bien sur on peut tout faire: ajouter, supprimer une Clé, une valeur, voir la liste des sous-clé, la liste des valeurs...
En VB 2005 la Classe My.Computer.Registry permet un accès à la base de registre:
Dim key As RegistryKey = My.Computer.Registry.ClasseRoot pointe sur la classe de base ClassRoot.
Pour un noeud on a les propriétés: Name, SubKeyCount;si ce dernier est supérieur à 0 GetSubKeyNames retourne un tableau de chaînes contenant le nom des sous-clés. On peut ensuite ouvrir le sous nœud grâce à OpenSubKey.
Si ValueCount est supérieur à 0, le noeud contient des valeurs GetValueNames retourne un tableau de chaîne contenant le nom des valeurs. On peut ensuite lire la valeur avec GetValue.
N'oublier pas de fermer tous les objets RegistryKey (ouverts ou crées) par Close.
Exemples pratiques:
Exemple 1:
Word est-il installé? il faut voir si le registre contient HKEY_CLASSES_ROOT\Word.Application
Dim key As RegistryKey = My.Computer.Registry.ClasseRoot.OpenSubKey ("Word.Application")
If key Is Nothing: Word n'est pas installé.
Exemple 2:
Lire rapidement une valeur? (sans instanciation)
Dim valeur As String = My.Computer.Registry.GetValue ("HKEY_CLASSES_ROOT\Noms","nom","")
3 paramètres: nom de la clé, nom de la valeur (mettre NOTHING pour la valeur par défaut), valeur à retourner si pas de valeur.
Exemple 3:
Modifier rapidement une valeur?
Il existe SetValue.
Avant de l'utiliser il faut ouvrir un registryKey en écriture:
Dim rc As RegistryKey = My.Computer.ClasseRoot.OpenSubKey ("Noms",True) 'True permet l'écriture
rc.SetValue("Nom valeur", valeur)
Il existe enfin DeleteValue, DeleteSubKey et DeleteSubTreeKey..
Exemple 4:
Ajouter une ligne dans le menu contextuel de Windows: clique droit sur un raccourci ou sur un fichier dans l'explorer. Cela ouvre un menu contextuel avec une ligne 'MonProgram'. Si on clique dessus, on lance l'exécutable 'MonProg.exe' et on charge le fichier pointé.
Dim regKey As RegistryKey
regKey = My.Computer.Registry.ClassesRoot.CreateSubKey("*\Shell\MonProgram\command")
My.Computer.Registry.SetValue("HKEY_CURRENT_USER\*\Shell\MonProgram\command", "", My.Application.Info.DirectoryPath & "\" & "MonProg.exe -o" & Chr(34) & "%L" & Chr(34))
Si MonProg.exe est en VB, il faut récupérer au démarrage le nom du fichier (voir 4-1)