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

Langage Delphi Discussion :

nom de fichier et variables d'environnement


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2002
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 30
    Points : 21
    Points
    21
    Par défaut [résolu]nom de fichier et variables d'environnement
    Bonjour,

    Savez-vous comment transformer un nom de fichier comportant des variables d'environnement : par exemple je voudrais obtenir "C:\Windows\system32\notepad.exe" à partir de "%SystemRoot%\system32\notepad.exe"

    pour info j'obtiens ces noms de fichiers dans la base de registre dans HKEY_CLASSES_ROOT\Applications\shell\open\command, et je voudrais les afficher ainsi que leur icône associée. J'utilise pour cela SHGetFileInfo mais il n'interprète pas les %machin%

    s'il n'existe pas de moyen simple, je comptais faire une recherche manuelle dans le nom de fichier pour remplacer les %machin% par des GetEnvironmentVariable('machin') mais si vous connaissez une fonction toute faite (mes recherches sont infructeuses) je suis preneur ! Merci beaucoup

  2. #2
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    J'ai récupéré ça il y à longtemps et je ne sais pas qui est l'auteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    procedure TForm1.Button2Click(Sender: TObject);
    Var
      p : PChar;
      i:integer;
    begin
      p := AllocMem(0);
      i := GetEnvironmentVariable( 'PATH',P,0);// récupération de la taille nécessaire pour le buffer.
      ReAllocMem(P,i);
      GetEnvironmentVariable( 'PATH',P,i);// La valeur de la variable d'environnement se met dans P
      Memo1.Lines.Clear;
      Memo1.Lines.add(string(P));// on affiche
      Freemem(P);               // on libère la mémoire prise par P
    end;
     
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    Var
      P: PChar;
      T:String;
    begin
       Memo1.Clear;
       P:=GetEnvironmentStrings;
       // le problème est que GetEnvironnementString renvoie une adresse mémoire
       // à partir de laquelle sont placés nos variables et valeurs.
       // on les trouve rangées ainsi à partir de cette adresse :
       // Nom de la variable=valeur#0Nom suivant=valeur#0 ...Dernière variable=Valeur#0#0
       // bref le séparateur entre les variable est le caractère nul #0. On reconnait la fin par deux #0
       While P^<>#0 do
       begin
         T:=T+P^; // pn rajoute le caractère P^à la fin de notre chaîne de caractère T
         inc(P);// en incrémentant l'adresse de 1, on passe ainsi au caractère suivant
         if P^=#0 then // si on tombe sur un caractère #0
         begin
           Memo1.Lines.Add(T); // On a donc fini pour une variable d'environnement et donc on peut placer la ligne dans notre mémo
           T:=''; // on réinitialise T à '' pour la variable suivante.
           inc(p); // caractère suivant. Si ce caractère est #0 alors notre While va s'arrèter
                   // En effet, on a eu 2 #0 de suite 
         end;
       end;
    end;
    Bon développement ! (Et merci à l'auteur)

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2002
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 30
    Points : 21
    Points
    21
    Par défaut Merci mais j'ai trouvé plus simple!
    Merci beaucoup, mais sur ngscan on m'a indiqué la fonction API ExpandEnvironmentStrings qui fait exactement ce que je recherche, à savoir remplacer les %machin% d'un chemin par leurs valeurs réelles.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. créer nom de fichiers avec variables
    Par Infra_Red dans le forum Fortran
    Réponses: 4
    Dernier message: 16/06/2010, 21h14
  2. [XLST] Nom de fichier avec variable
    Par Wells dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 07/05/2008, 09h37
  3. Réponses: 6
    Dernier message: 14/03/2007, 14h36
  4. Réponses: 23
    Dernier message: 26/03/2006, 20h36
  5. Shell: récupérer le bon nom de fichier dans une variable
    Par claralavraie dans le forum Linux
    Réponses: 1
    Dernier message: 10/01/2006, 11h45

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