Python et la base de registre windows¶
Il est possible via python d’interroger et de modifier la base de registre windows et cela de façon simple et transparente
Comment créer une clef ?¶
Pour créer une nouvelle clé au registre on utilise la méthode _winreg.CreateKey( key, sub_key) où key est une clé déjà ouverte ou une constante HKEY_* prédéfinie et sub_key représente la sous-clé qui sera créée. Cette fonction retourne le handle de la clé ouverte.
import _winreg
key = _winreg.CreateKey(_winreg.HKEY_CURRENT_USER, 'Software\\MonProg')
Comment supprimer une clef ?¶
Pour supprimer une clé au registre on utilise la méthode _winreg.DeleteKey( key, sub_key) où key est une clé déjà ouverte ou une constante HKEY_* prédéfinie et sub_key représente la sous-clé qui sera supprimée. Cette fonction ne peut pas supprimer une clé qui possède des sous-clés
import _winreg
_winreg.DeleteKey(_winreg.HKEY_CURRENT_USER, 'Software\\MonProg')
Comment ouvrir une clef et lire/modifier/supprimer une valeur ?¶
Pour ouvrir une clé, on utilise la fonction _winreg.OpenKey( key, sub_key[, res = 0][, sam = KEY_READ]) où key est une clé déjà ouverte où une constante du type HREF_*, sub_key, la sous-clé à ouvrir, res un entier qui doit rester à 0 et sam un entier qui définit le masque d’accès. La constante KEY_SET_VALUE permettra de modifier la clé en question alors que KEY_READ ne permettra d’accéder à cette clé qu’en lecture seule. Cette fonction retourne le handle de la clé.
Pour lire une valeur, on utilise la fonction _winreg.QueryValueEx( key, value_name) où key est une clé déjà ouverte et value_name le nom de la valeur à lire. Cette fonction retourne un couple où le premier élément est la valeur de la donnée et le deuxième un entier donnant le type de la donnée.
import _winreg
key = _winreg.OpenKey( _winreg.HKEY_CURRENT_USER, 'Software\\MonProg',0, _winreg.KEY_READ)
(valeur,typevaleur) = _winreg.QueryValueEx(key,'MaDonnee')
_winreg.CloseKey(key)
print valeur, typevaleur
Pour modifier une valeur, on applique la fonction SetValueEx( key, value_name, reserved, type, value) sur la key précédente où value_name représente le nom de la valeur, reserved peut être n’importe quoi (c’est toujours 0 qui est transmis), type est un entier (dont les valeurs possibles sont données dans le tableau ci-dessous) représentant le type de la donnée et value la valeur de la donnée en question.
import _winreg
key = _winreg.OpenKey( _winreg.HKEY_CURRENT_USER, 'Software\\MonProg',0, _winreg.KEY_SET_VALUE)
_winreg.SetValueEx(key, 'MaDonnee', 0, _winreg.REG_DWORD, 5)
_winreg.CloseKey(key)
Constante | Description |
---|---|
REG_BINARY | Donnée binaire de n’importe quel forme |
REG_DWORD | Un nombre sur 32 bits |
REG_DWORD_LITTLE_ENDIAN | Un nombre sur 32 bits au format little-endian |
REG_DWORD_BIG_ENDIAN | Un nombre sur 32 bits au format big-endian |
REG_EXPAND_SZ | String référençant une variable d’environnement |
REG_LINK | Un lien symbolique |
REG_MULTI_SZ | Une séquence de string |
REG_NONE | Type sans valeur définie |
REG_RESOURCE_LIST | Une liste de ressources |
REG_SZ | Un string |
Pour supprimer une valeur, on exécute la fonction _winreg.DeleteValue( key, value)
import _winreg
key = _winreg.OpenKey( _winreg.HKEY_CURRENT_USER, 'Software\\MonProg',0, _winreg.KEY_SET_VALUE)
_winreg.DeleteKey(key, 'MaDonnee')
_winreg.CloseKey(key)