Bon, les ressources incorporées dans l'executable c'est bien beau, mais pour certains programmes il serait plus utile de placer des valeurs (comme de la configuration) dans le registre.
C'est quoi ça, le registre ?
Le registre, ou plutôt base de registre est en fait une base de données utilisée par Windows pour stocker des quantités monstres d'informations sur la configuration. C'est dans le registre que tous vos paramètres Windows sont stockés, il faut donc faire très attention lorsqu'on le manipule.
Nous allons nous en servir pour stocker nos informations de configuration.
Tout d'abord, pour accéder à votre éditeur de registre Windows, inscrivez "
regedit" dans menu démarrer -> éxécuter.
Voici à quoi ressemble mon éditeur de registre :
Vous voyez qu'on se retrouve avec une arborescence semblable à des dossiers. Cependant ici les dossiers sont matérialisés par des "Clés" et les fichiers des "Valeurs".
La valeur "Path" présente dans la clé 7-Zip, les données qu'elle contient est le path de l'emplacement de ce programme dans mon ordinateur.
Donc pour notre programme nous rassemblerons toutes les valeurs de configurations dans la même clé pour organiser le tout.
Pour ce qui est des clés, la méthode sera la même qu'avec notre fichier .ini : un nom et sa valeur correspondante.
Pour enregistrer et récupérer des configurations dans le registre nous allons étudier deux méthodes :
1 - Les fonctions internes de VB
Des fonctions ont été pré implémentées dans VB.NET pour faire cela facilement, leur avantage : la rapidité et la facilité. Inconvénient : la clé dans laquelle les valeurs seront enregistré n'est pas sélectionnable, elles se situeront dans : HKEY_CURRENT_USER\Software\VB and VBA Program Settings\NomDuProgramme.
Vous pourrez ensuite choisir dans cette clé de créer des sous-clés mais vous ne pouvez pas changer de clé "principale".
Commencons par l'écriture :
Code : VB.NET | SaveSetting("Ressources", "Configuration", "Config1", "10")
|
Le premier argument permet de spécifier le nom du programme, la clé qui sera crée dans
VB and VBA Program Settings. Le second paramètre permet de spécifier la section, ici j'utilise "Configuration", puis viens le nom de la valeur puis son contenu.
Ce qui nous créera la clé
HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Ressources\Configuration
Avec à l'intérieur la valeur
Config1 = 10
Pour la récupérer :
Code : VB.NET | Valeur = GetSetting("Ressources", "Configuration", "Config1")
|
Les arguments correspondent à la fonction précédente.
Avec possibilité de spécifier un 4eme argument en valeur par défaut.
La suppression de clé :
Code : VB.NET | DeleteSetting("Ressources")
|
Vous pouvez spécifier en paramètre optionnels le nom de la section à supprimer et la valeur si vous ne voulez supprimer qu'une seule valeur de configuration.
2 - En utilisant les API
Une API (Application Programming Interface) est un rassemblement de fonctions ou méthodes permettant de réaliser un certain type de travail.
Ici, cette API va nous permettre de travailler sur le registre.
Passons à la seconde méthode avec plus de possibilités. Nous allons pouvoir, entre autres, spécifier dans quelle section écrire.
Au sommet de l'arborescence nous avons le choix entre 2 sections : HKEY_LOCAL_MACHINE et HKEY_CURRENT_USER.
Local machine contient tout ce qui est relatif à votre ordinateur, tandis que current user contient uniquement des données utilisables par l'utilisateur actuel.
Après tout dépend l'utilité qu'aura votre programme.
Nous allons travailler dans le namespace Microsoft.Win32, vous pouvez effectuer un
Imports Microsoft.Win32
pour éviter des écritures superflues.
Commençons par créer un objet Clé dans notre programme grâce à :
Code : VB.NET | Dim Cle As Microsoft.Win32.RegistryKey
|
Il faut la placer ensuite dans la section dans laquelle nous voulons travailler, pour moi ce sera local machine.
Code : VB.NET | Cle = Microsoft.Win32.Registry.LocalMachine
|
Registry contenant la liste des clés disponibles à la racine (current_user ...)
Maintenant on peut :
- Créer une sous-clé
- Ouvrir une sous-clé
- Ecrire ou lire une valeur
- Effacer une valeur
Je vous conseille de créer au minimum une sous clé relative à votre programme pour hiérarchiser le tout.
Ce qui me donne en code pour me placer et créer HKEY_LOCAL_MACHINE\App_Ressources et y créer une Valeur1 qui est égale à 1 :
Code : VB.NET | Dim Cle As Microsoft.Win32.RegistryKey = Nothing
Cle = Microsoft.Win32.Registry.LocalMachine
Cle.CreateSubKey("App_Ressources").SetValue("Valeur1", "1")
|
On résume : création d'une variable clé que j'initialise à nothing (pour que le code soit un peu plus clair).
Ensuite j'attribue la clé HKEY_LOCAL_MACHINE (qui est une clé principale) a ma variable.
Si vous avez donc suivi ma variable représente le "dossier" HKEY_LOCAL_MACHINE.
De ce point, je crée une sous clé (un répertoire) et j'y insère une valeur (un fichier).
Je trouve beaucoup plus simple de se représenter la base de registre sous cette arborescence de dossiers.
En fait vous naviguez simplement au millieu de dossiers.
Récapitulatif
Je récapitule les fonctions (a utiliser sur un objet de type
RegistryKey) :
Pour créer une clé (un répertoire) :
Code : VB.NET | CreateSubKey("App_Ressources")
|
L'argument représente le nom de la clé à créer
Pour se déplacer dans une clé (un répertoire):
Code : VB.NET | OpenSubKey("App_Ressources")
|
Où l'argument est le nom de la clé où se déplacer.
Pour créer une valeur (un fichier) :
Code : VB.NET
Où le premier argument est le nom de la valeur et le second ... Sa valeur =)
Récupérer une valeur (un fichier) :
Code : VB.NET
Où l'argument est le nom de la valeur a retrouver, renvoie Nothing si la value n'existe pas.