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
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
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 ?
recherche dans la faq:
ExtractFilePath(Application.ExeName);
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 ?
@+
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 scannerA+
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;
EDIT de 15h18: Un oubli : pour récupérer le chemin seul il faut bien entendu faire:A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part CheminDeLocalisation:=ExtractFilePath(RechercheFichier('NomCourt.exe','C:\'));
salut
je ne sais pas à priori où se trouve le chemin mais je connais le nom de l'application à exécuter
Salut,
On a certainement rédigé au même moment tu peux trouver ce chemin comme indiqué dans mon message précédent.
A+
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+
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é :
Je ne sais pas si celà sera applicable dans ton cas ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part HKEY_CURRENT_USER\SOFTWARE\PSPad\PSPadPath
A voir
Salut,
... mais bien sûr, comme ceci :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.A+
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:\')); ...
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 ^^
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+
Salut,
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 :
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 HKEY_CURRENT_USER\SOFTWARE\Skype\Phone\SkypePath
A+
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;
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+
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager