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. .. code-block:: python 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 .. code-block:: python 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. .. code-block:: python 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. .. code-block:: python 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) .. code-block:: python import _winreg key = _winreg.OpenKey( _winreg.HKEY_CURRENT_USER, 'Software\\MonProg',0, _winreg.KEY_SET_VALUE) _winreg.DeleteKey(key, 'MaDonnee') _winreg.CloseKey(key)