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)