Python Facile

Source : shellFolders.py

 
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

"""
Nom: shellFolder.py
Description: Localise les chemins d'accés des dossiers systèmes de l'utilisateur.

Auteur: Lionel Grolleau <lionel.grolleau (at) free.fr>
Date: 12/12/03
Version: 0.1.0
License: GPL
Test: python 2.3.2 sous Windows 98.
Site: http://lionel.grolleau.free.fr

Organisation:
Les chemins d'accés aux dossiers systèmes de l'utilisateur sont stokés dans 
la base de registre. La clé 'User Shell Folders' contient sous windows 98 les
chemins pour le dossier 'Mes Documents' (Personal), le 'Cache' d'IE et les 
'favoris' (Favorites) de l'utilisateur.
Il existe une autre clé 'Shell Folders' qui contient d'autres dossiers.

Utilisation:
La fonction getUserShellFolders() retourne un dictionnaire contenant les couples
valeur/données de la clé 'User Shell Folders' de l'utilisateur.
Les autres fonctions getUserPersonalFolder(), getUserCacheFolder() et 
getUserFavoritesFolders() retourne le chemin du dossier recheché.
La fonction getUserShellFolder(value) retourne le chemin du dossier dont la 
valeur est passé en paramétre (voir les constantes ci-dessous).

Variables & Constantes:
USERSHELLFOLDERS : clé de la base de registre contenant les chemins.
VALUEPERSONAL : valeur pour le répertoire "Mes Documents".
VALUECACHE : valeur pour le répertoire "Cache" d'IE.
VALUEFAVORITES : valeur pour le répertoire "Favoris".
"""

import _winreg
import os

USERSHELLFOLDERS = r"Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
VALUEPERSONAL = 'Personal'
VALUECACHE = 'Cache'
VALUEFAVORITES = 'Favorites'

def getUserShellFolder(value):
    """Localisation d'un répertoire système de l'utilisateur - Locate user shell Folder."""
    try:
        key= _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, USERSHELLFOLDERS)
        data,dummytype=_winreg.QueryValueEx(key, value)
    except EnvironmentError:
        pass
    _winreg.CloseKey(key)
    # Necessaire pour Win2000 - Required for Win2000
    max_recursion = 3
    while '%' in data and max_recursion > 0:
        data = expandvars(data)
        max_recursion -= 1
    return data

def getUserPersonalFolder():
    """Localisation du répertoire "Mes Documents" de l'utilisateur - Locate "Personal" user folder."""
    return getUserShellFolder(VALUEPERSONAL)
def getUserCacheFolder():
    """Localisation du répertoire "Cache" de l'utilisateur - Locate "Cache" user folder."""
    return getUserShellFolder(VALUECACHE)
def getUserFavoritesFolder():
    """Localisation du répertoire "Favoris" de l'utilisateur - Locate "Favorites" user folder."""
    return getUserShellFolder(VALUEFAVORITES)

def getUserShellFolders():
    """Retourne un dictionnaire valeurs/données des répertoires de l'utilisateur."""
    userShellFolders = {}
    try:
        key= _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, USERSHELLFOLDERS)
        subkeys, values, datemodif = _winreg.QueryInfoKey(key)
        for i in range(values):
            value, data, type = _winreg.EnumValue( key, i)
            userShellFolders[value] = data
        _winreg.CloseKey(key)
    except EnvironmentError:
        pass
    return userShellFolders

def _main():
    print "Répertoire Personel:\n%s.\n%s" % (getUserPersonalFolder() , "_"*20)
    print "Répertoire Cache:\n%s.\n%s" % (getUserCacheFolder() , "_"*20)
    print "Répertoire Favoris:\n%s.\n%s" % (getUserFavoritesFolder() , "_"*20)
    print getUserShellFolders()

if __name__ == '__main__':
    _main()