IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Utilisation du registre


Sujet :

C++Builder

  1. #1
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut Utilisation du registre
    Bonjour,

    je souhaite modifier la cible de "Mes documents" en passant par la base de registre.
    J'ai regarder dans
    HKEY_CURRENT_USER\Software\microsoft\windows\CurrentVersion\Explorer\Shell Folders
    (Personal)mais "Mes documents" ne change pas de place (clique droit sur le dossier et le chemin est le même qu'au depart) alors que la modif est réalise dans la base de registre

    Et j'ai essayé aussi dans
    HKEY_CURRENT_USER\Volatile Environment
    (HOMEDRIVE) mais toujours aucune modif...et en plus quznd je redémarre mon PC les modifs dans la base de registre sont remises par defaut....

    Quelqu'un peut m'éclaircir

    Voici mon code
    void __fastcall TForm1::Bt_deplClick(TObject *Sender)
    {
    TRegistry *registre = new TRegistry();

    registre->RootKey = HKEY_CURRENT_USER;

    if (registre->OpenKey("\\Volatile Environment",false) )
    {
    if (registre->ValueExists("HOMEDRIVE") )
    {
    registre->WriteString("HOMEDRIVE", "D:");
    }

    }
    }

  2. #2
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    En faite mes modifs étaient appliquées puisque j'avais un souci de rafraichissement (ferme puis reouvre mes documents). Mais acutellement je ne peux pas déplacer le contenu de "Mes documents" car quand je réalise le code
    AnsiString OldPath = Edit_mesdocs->Text ; //chemin du dossier "Mes documents"
    AnsiString NewPath = Edit_dest->Text ; //chemin où le dossier va être copier

    if (DirectoryExists(OldPath) && !DirectoryExists(NewPath))
    {
    if(CopyFile(OldPath.c_str(),NewPath.c_str(),true) == true ) // déplace le fichier
    {
    ShowMessage("Réperoire déplacé avec succès");
    }
    else
    {
    ShowMessage("Erreur");
    }
    }
    else
    {
    ShowMessage("Répertoire inexistant");
    }
    J'obtiens la fenêtre avec le message "Erreur" mais lorsque je test ma fonction cela marche avec d'autres sources. Peut-être qu'il est impossible de copier Mes Documents (car cette fonction supprime le repertoire) sans lui indiquer quelque part ???
    J'utilise le chemin du registre :
    HKEY_CURRENT_USER\Software\microsoft\windows\CurrentVersion\Explorer\Shell Folders
    à la valeur "Personal"
    Quelqu'un connaît la solution?

  3. #3
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    Personne n'a manipulé la base de registre pour faire cela ???

  4. #4
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut Fonction CopyFile
    Est-ce que la fonction "CopyFile" copie les fichiers car moi je trouve uniquement mes dossiers vides ?????

  5. #5
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    La fonction CopyFile copie bien les fichiers, sinon sous BCB il y a CopyFileTo

    Tu pourrais indiquer ce qu'il y a dans tes variable OldPath et NewPath ?

  6. #6
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Citation Envoyé par Général03 Voir le message
    Personne n'a manipulé la base de registre pour faire cela ???
    J'utilise Tweak UI de Microsoft sous Windows XP pour faire cela. Donc, je n'ai jamais manipuler le registre directement.
    http://www.microsoft.com/windowsxp/d...powertoys.mspx

  7. #7
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    J'ai deux "edit" sur ma form où sont placé le repertoire actuel de "Mes documents" et celui que je souhaite installé.
    Pour connaitre le chemin de "mes documents" je vais le chercher dans la base de registre et je le copie dans "Edit_mesdocs"
    registre->RootKey = HKEY_CURRENT_USER;

    if (registre->OpenKey("\\Software\\microsoft\\windows\\CurrentVersion\\Explorer\\Shell Folders",false) )
    {
    if (registre->ValueExists("Personal") )
    {
    Edit_mesdocs->Text = "C:\\e";//(registre->ReadString("Personal"));
    }

    }
    Pour copier j'ecris le chemin choisit par l'utilisateur dans la base de registre
    if (SelectDirectory("Sélectionnez le répertoire de copie", "c: & d:", Directory))
    {
    if (Directory == "D:\\")
    {
    Edit_dest->Text = Directory+"Mes documents";
    }
    else
    {
    Edit_dest->Text = Directory+"\\Mes documents";
    }
    }
    else
    {
    Edit_dest->Text = "Vous n'avez pas choisit de chemin de destination";
    }
    Ensuite je les places dans des "AnsiString"
    AnsiString OldPath = Edit_mesdocs->Text ; //chemin du dossier "Mes documents"
    AnsiString NewPath = Edit_dest->Text ; //chemin où le dossier va être copier
    J'avais vu qu'il fallait que l'ancien chemin soit existant et pas celui de destination, mais malgré que je fasse cela il me met une erreur sur le "CopyFile" (il ne rentre pas dans le test if). Ca ne marche ni avec CopyFileTo ni avec MoveFile !!!!

  8. #8
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    Je me suis trompé dans la première balise je voulais mettre
    registre->RootKey = HKEY_CURRENT_USER;

    if (registre->OpenKey("\\Software\\microsoft\\windows\\CurrentVersion\\Explorer\\Shell Folders",false) )
    {
    if (registre->ValueExists("Personal") )
    {
    Edit_mesdocs->Text = (registre->ReadString("Personal"));
    }

    }
    et pour placer le nouveau chemin dans la base de registre je fais
    if (registre->OpenKey("\\Software\\microsoft\\windows\\CurrentVersion\\Explorer\\Shell Folders",false) )
    {
    if (registre->ValueExists("Personal") )
    {
    registre->WriteString("Personal", Edit_dest->Text);
    }

    }

  9. #9
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Général03 au lieu de mettre ton code sur le forum entre les balises de citation [QUOTE], je te conseil de mettre ton code dans les balises [CODE]. C'est plus facile à lire

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/03/2010, 15h38
  2. Utiliser le registre EIP en C
    Par mensoif dans le forum Assembleur
    Réponses: 4
    Dernier message: 19/11/2008, 13h33
  3. Utilisation du registre ?
    Par orditosh dans le forum WinDev
    Réponses: 4
    Dernier message: 27/01/2008, 18h12
  4. execution d'un programme sur eclipse utilisant le registre RMI
    Par engineer_23 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 16/10/2007, 15h51
  5. [VB.NET]Utilisation Du Registre
    Par Astro8899 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/11/2006, 19h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo