#include "c_usn_file_registry.h" #include #include #include // Initialisation du singleton de la classe c_usn_file_registry* c_usn_file_registry::_p_singleton = NULL; c_usn_file_registry::c_usn_file_registry(void) { } c_usn_file_registry::~c_usn_file_registry(void) { } //############################################################################# //## Operation: instancier_singleton //## Crée un singleton usn_file_registry, lit le fichier .reg donné en argument, et construit une structure de données interne //## (basée sur nmutility::CStdMap) avec l'ensemble des valeurs contenues dans le fichier //############################################################################# static bool c_usn_file_registry::instancier_singleton(nmutility::CString nom_fichier) { bool CodeRet=true; // Création du singleton if (_p_singleton == NULL) { _p_singleton = new c_usn_file_registry(); } // Lecture du fichier .reg std::ifstream fichier( nom_fichier ); RegistryItem RegistryItem ; if ( fichier ) { std::string ligne; // Variable contenant chaque ligne lue while ( std::getline( fichier, ligne ) ) { // Construction de la structure de données interne avec l'ensemble des valeurs contenues dans le fichier if ( ligne[0] == '[' ) { RegistryItem.path = ligne ; // Par exple, [HKEY_LOCAL_MACHINE\SOFTWARE\Entreprise\UXT\MINMGR] while ( std::getline( fichier, ligne ) ) // On lit toutes les clés et valeurs de la base de registres définies à cet endroit { if ( ligne[0] == '"' ) // Par exple, on vient de lire la ligne "DragAndDrop"=dword:00000000 { std::string CleBaseDeRegistres, ValeurBaseDeRegistres; // Code à écrire pour avoir "DragAndDrop" dans la variable CleBaseDeRegistres et "dword:00000000" dans la variable ValeurBaseDeRegistres RegistryItem.key = CleBaseDeRegistres; RegistryItem.value = ValeurBaseDeRegistres; std::string CleMap ; CleMap = RegistryItem.path + " : " + CleBaseDeRegistres; _map.insert( CleMap, RegistryItem ); } } } // Fin if ( ligne[0] == '[' ) } // fin while } // fin if ( fichier ) else CodeRet=false; return CodeRet; } //############################################################################# //## Operation: get_singleton //## Retourne le singleton créé par instancier_singleton //############################################################################# static c_usn_file_registry* c_usn_file_registry::get_singleton(); { return _p_singleton; } //############################################################################# //## Operation: lire_entier //## retourne l'entier correspondant à la clé demandée (identifiée par son chemin et son nom) //############################################################################# int c_usn_file_registry::lire_entier(nmutility::CString nom_chemin, nmutility::CString nom_valeur) { // Exple : lecture de la valeur de "DragAndDrop" de [HKEY_LOCAL_MACHINE\SOFTWARE\Entreprise\UXT\MINMGR] nmutility::CStdMap ::iterator im; RegistryItem RegistryItem; std::string cle; cle = nom_chemin + " : " + nom_valeur; im = _map.find(cle) ; // Par exple, (*im).second.value contient dword:00000000 std::string valeur; valeur = (*im).second.value; size_t Pos2Points; Pos2Points=valeur.find_first_of(":"); std::string ValeurEntier; ValeurEntier = valeur.substr(Pos2Points+1); // On récupère ce qu'il y a après le : // Conversion de la string ValeurEntier en entier std::istringstream iss(ValeurEntier); int num; iss >> num; return(num); } //############################################################################# //## Operation: lire_chaine //## Retourne la chaîne correspondant à la clé demandée (identifiée par son chemin et son nom) //############################################################################# nmutility::CString c_usn_file_registry::lire_chaine(nmutility::CString nom_chemin, nmutility::CString nom_valeur) { // Reste à coder }