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 :

Comment récuperer le chemin d'un exécutable ?


Sujet :

Langage Delphi

  1. #1
    Membre du Club Avatar de bigey3
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 50
    Points
    50
    Par défaut Comment récuperer le chemin d'un exécutable ?
    salut

    je souhaiterais exécuter une application à partir de delphi.
    le soucis c'est que je souhaiterais récuperer automatiquement le chemin de localisation de l'application et affecter le chemin à la fonction ShellExecute.

    un coup de pouce
    merci
    La patience est un Chemin d'or

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Si je comprends bien, tu souhaites scanné le Disque Dur afin de rechercher le chemin de l'exécutable à lancer avec ShellExecute car celui ci peut être n'importe ou, c'est ça ?

  3. #3
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    recherche dans la faq:
    ExtractFilePath(Application.ExeName);
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Entre la réponse d'Ero-Sennin et celle d'Edam, effectivement on peut se poser la question.

    Veux-tu récupérer le chemin de ta propre application ou celle que tu vas appeler via ShellExecute ?

    @+

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    ExtractFilePath(Application.ExeName); ne renvoie que le chemin de l'application à partir de laquelle tu veux récuperer le chemin de localisation de l'autre application qu'il veut lancer avec ShellExecute.

    Et comme dit Ero-sennin si tu ne connais que le nom-court de cette autre application il ne te reste plus qu'à scanner le disque dur pour en trouver le chemin avec FindFirst et FindNext.

    A+

    EDIT de 15h07 : voici du code pour scanner
    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
     
    Function RechercheFichier(Nom,Chemin : String) : String;
    Var      SR : TSearchRec; R : Integer; S : String;
    Begin    If FileExists(Chemin+Nom) Then
             Begin Result:=Chemin+Nom; EXIT; End;
             R:=FindFirst(Chemin+'*.*',16,SR);
             While R=0 Do
             Begin If (SR.Name<>'.') And (SR.Name<>'..') Then
                   Begin S:=RechercheFichier(Nom,Chemin+SR.Name+'\');
                         If S <>'' Then
                         Begin Result:=S; EXIT; End;
                   End;
                   R:=FindNext(SR);
             End;
             Result:='';
    End;
     
    // Utilisation :
     
    procedure TfrmTrImages.bCheminClick(Sender: TObject);
    begin     ShowMessage(RechercheFichier('mem12u.exe','C:\'));
    end;
    A+

    EDIT de 15h18: Un oubli : pour récupérer le chemin seul il faut bien entendu faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CheminDeLocalisation:=ExtractFilePath(RechercheFichier('NomCourt.exe','C:\'));
    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  6. #6
    Membre du Club Avatar de bigey3
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 50
    Points
    50
    Par défaut tout à fait ero-sennin
    salut

    je ne sais pas à priori où se trouve le chemin mais je connais le nom de l'application à exécuter
    La patience est un Chemin d'or

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    On a certainement rédigé au même moment tu peux trouver ce chemin comme indiqué dans mon message précédent.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  8. #8
    Membre du Club Avatar de bigey3
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 50
    Points
    50
    Par défaut ok gilbert
    juste une dernière choz,
    serait t-il possible de faire cette recherche sur une autre partition à la fois(i.e sur le c: et sur le d.


    a+
    La patience est un Chemin d'or

  9. #9
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Re,

    Je me pose une question ... N'est il pas possible de lire le chemin dans la base de registre... Je dis celà car j'avais fait un petit programme pour rechercher la présence ou non d'un exécutable ... et j'avais eu un soucis. J'ai téléchargé PSPad et je l'avais renommé en PSPad.exe pour dire de le nommé explicitement et je l'avais mis dans mon dossier utilitaires (dossier où je stocke tous les outils utile). En utilisant la fonction de recherche, j'avais bien le chemin de l'exécutable mais malheureusement, j'avais le chemin du PSPad.exe (installeur) et non le PSPad.exe qui sert au lancement du programme. J'avais donc cherché dans la base de registre pour voir si il n'y avait pas une clé qui contiendrait le chemin de l'exécutable et en cherchant un peu, j'ai trouvé. Donc dans mon cas, je test juste si une clé existe, si oui, je lis sa valeur, si la clé n'existe pas, c'est que le programme n'est pas installé ...

    Pour info, c'était cette clé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HKEY_CURRENT_USER\SOFTWARE\PSPad\PSPadPath
    Je ne sais pas si celà sera applicable dans ton cas ...
    A voir

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    Bigey3 demande :juste une dernière choz,
    serait t-il possible de faire cette recherche sur une autre partition à la fois(i.e sur le c: et sur le d.
    ... mais bien sûr, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        ...
        CheminDeLocalisation:='';
        CheminDeLocalisation:=ExtractFilePath(RechercheFichier('NomCourt.exe','C:\'));
        if CheminDeLocalisation='' 
        then CheminDeLocalisation:=ExtractFilePath(RechercheFichier('NomCourt.exe','D:\'));
        ...
    A+

    EDIT : si l'astuce d'Ero-sennin marche cela sera certainement plus rapide que d'avoir à scanner le disque par contre j'ai pas pigé comment utiliser son astuce.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  11. #11
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    EDIT : si l'astuce d'Ero-sennin marche cela sera certainement plus rapide que d'avoir à scanner le disque par contre j'ai pas pigé comment utiliser son astuce.
    C'est simple . Lorsque tu installes programme (ça dépend lesquels) en général, il y a une clé registre qui faire référence à l'endroit ou est enregistré ton programme.

    Par exemple PSPad, si tu l'installes dans C:\PSPad\, il te suffit de lire la valeur de la clé HKEY_CURRENT_USER\SOFTWARE\PSPad\PSPadPath et tu as le répertoire de l'exécutable. J'essaierai de te faire un petit exemple lorsque les fêtes seront passées

    Au passage , bonne année ^^

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut et Bonne Année à tous,

    A Ero-sennin : Merci pour le petit exemple à l'occasion.
    Je savais qu'on pouvait trouver dans la base de registre les *.exe qui se lancent automatiquement lors du démarrage de Windows.
    Tu m'apprends qu'on y trouve également ceux des programmes qu'on installe sous Windows.
    Mais si je place via l'Explorer-Windows un *.exe quelconque dans un dossier quelconque est-il recensé automatiquement dans la base de registre ?

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  13. #13
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Citation Envoyé par Gilbert Geyer Voir le message
    Mais si je place via l'Explorer-Windows un *.exe quelconque dans un dossier quelconque est-il recensé automatiquement dans la base de registre ?
    A ma connaissance non ... Je te parlais en fait de programmes qui s'installent via un installeur ... Par exemple, pour reprendre le cas de PSPad, lorsqu'on l'installe, on crée un lien dans la base de registre ... (voir post précédent). Si tu veux un autre exemple, il y a aussi Skype qui conserve dans une clé le chemin de l'exécutable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HKEY_CURRENT_USER\SOFTWARE\Skype\Phone\SkypePath
    Je t'avais promis un exemple, le voici (pour le cas de PSPad) :
    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
    procedure TForm1.BtnGetPathExecutableClick(Sender: TObject);
    var
    CheminExecutable:string;
    begin
     CheminExecutable:='';
     with TRegistry.Create do
     begin
       RootKey:=HKEY_CURRENT_USER;
       if OpenKey('SOFTWARE\PSPad',false) then
         CheminExecutable:=ReadString('PSPadPath');
     end;
     
     if CheminExecutable<>'' then
       ShowMessage('Chemin de l''exécutable: '+CheminExecutable)
     else
       ShowMessage('Exécutable non trouvé');
    end;
    A+

  14. #14
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Re-Salut,

    Merci Ero-sennin pour ton exemple de code : je le testerai demain.
    Mais dommage que ça ne marche pas avec tous les *exe.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/08/2013, 22h59
  2. Réponses: 2
    Dernier message: 02/03/2006, 10h09
  3. Comment récuperer le chemin des mails reçus de Outlook ?
    Par chleuh dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 16/08/2005, 16h44
  4. Comment gérer plusieurs icones dans son exécutable ?
    Par declencher dans le forum Langage
    Réponses: 5
    Dernier message: 15/10/2003, 10h49
  5. Comment subsituer un chemin par un autre dans un réseau ?
    Par Baillard dans le forum Développement
    Réponses: 3
    Dernier message: 11/08/2002, 14h01

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