Lancer deux shellexecute [Résolu]

cs_jmonnier 3 Messages postés vendredi 21 mai 2004Date d'inscription 16 septembre 2009 Dernière intervention - 3 oct. 2008 à 14:40 - Dernière réponse : L_art_ment 316 Messages postés vendredi 21 septembre 2007Date d'inscription 6 février 2013 Dernière intervention
- 6 oct. 2008 à 21:48
Bonjour,

Je voudrais lancer ces deux processus:
ShellExecute(GetActiveWindow,nil,PChar(chemin),PChar('-c -sd -user "'+sUser+'" -pwd "'+sMDP+'" "'+sConnexion+'"'),nil,sW_SHOWMINIMIZED);
   
ShellExecute(GetActiveWindow,nil,PChar(chemin2),PChar('-c: -h: -m:+sIP -u:+sUser -p:+sMDP -a:2'),nil,sW_SHOWNormal);

Mais pour le moment ils se lancent en même temps alors que ce qu'il me faudrait c'est que le second se lance une fois le premier aboutit.

Pouvez-vous m'aider ?
 

Jocelyn
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 3 oct. 2008 à 15:52
3
Merci
Salut
Sais tu combien de temps le 1er shell mets à s'executer/se fermer ?
si c'est fixe, tu peux faire un sleep(2000); par exmple (2000 = 2 secondes)

Si ce n'est pas fixe, est ce que ça ouvre, puis ferme une fenetre ?
Dans ce cas, tu peux "choper" la fenetre qui s'ouvre puis si elle se ferme (son handle est détruit) alors le 2eme se lance !

Merci JulioDelphi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 117 internautes ce mois-ci

Commenter la réponse de JulioDelphi
Meilleure réponse
L_art_ment 316 Messages postés vendredi 21 septembre 2007Date d'inscription 6 février 2013 Dernière intervention - 3 oct. 2008 à 15:57
3
Merci
Bonjour,
Si les deux ShellExecute executent des lignes de commandes, j'ai une procedure qui lance la ligne de commande et attend qu'elle se finisse.
Si les deux ShellExecute font autre chose qu'executer des lignes de commandes alors je suis à côté de la plaque et je n'ai pas de meilleure réponse à t'apporter

<hr />
L'Armand joue, l'arme en joug... Mon site

Merci L_art_ment 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 117 internautes ce mois-ci

Commenter la réponse de L_art_ment
Meilleure réponse
Utilisateur anonyme - 3 oct. 2008 à 22:08
3
Merci
Salut, Essaye ca :

procedure TForm1.Button1Click(Sender: TObject);
begin
  If ShellExecute(GetActiveWindow,nil,PChar('notepad.exe'),Nil,nil,sW_SHOWMINIMIZED)>=32 Then
  ShellExecute(GetActiveWindow,nil,PChar('C:\Program Files\VideoLAN\VLC\vlc.exe'),Nil,nil,sW_SHOWMINIMIZED);
end;

Chez moi NotePad s'ouvre et ensuite c'est VLC. Le laps de temps n'est pas énorme par contre.

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 117 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Meilleure réponse
cs_PHIL63 76 Messages postés dimanche 9 février 2003Date d'inscription 10 août 2010 Dernière intervention - 4 oct. 2008 à 08:27
3
Merci
Bonjour,
Cette fonction n'est pas de moi (j'aurais bien aimé ), que son auteur me pardonne de ne pas le cité (je ne sais plus qui c'est) mais elle fonctionne parfaitement en remplacement de ShellExecute quand on veux attendre la fin de l'exécution d'un programme.

Le paramètre "voir" permet d'afficher ou non le programme lancé (c'est pratique), les autres paramètres se passe d'explication .

Déclaration :
Function ExecuteWait(Programme, parametres :string;voir :Boolean):Boolean;

Implémentation :
// Fonction permettant de lancer un programme externe et d'attendre la fin de celui-ci avant de continuer
Function TForm1.ExecuteWait(Programme, parametres :string;voir :Boolean):Boolean;
var ShExecInfo : TShellExecuteInfo;
begin
 try
   FillChar(ShExecInfo, SizeOf(ShExecInfo), 0);
   with ShExecInfo do
      begin
         cbSize := SizeOf(ShExecInfo);
         fMask  := SEE_MASK_NOCLOSEPROCESS;
         lpFile := PChar(Programme);      { le nom du programme }
         lpParameters := PChar(Parametres); { Les paramètres }
         lpVerb := 'open';
         if voir = True then nShow := SW_SHOW else nShow := SW_HIDE;
     end;
   if ShellExecuteEx(@ShExecInfo) then
       begin       { on execute le programme }
           WaitForSingleObject(ShExecInfo.hProcess, INFINITE); { on attends un temps indefinie que l'appli s'arrete }
       end;
   result := True;
 except
   result := False;
 end;
end;

Philippe DROUET

Merci cs_PHIL63 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 117 internautes ce mois-ci

Commenter la réponse de cs_PHIL63
cs_jmonnier 3 Messages postés vendredi 21 mai 2004Date d'inscription 16 septembre 2009 Dernière intervention - 6 oct. 2008 à 11:09
0
Merci
Salut,

Merci à vous tous. Je pense que je vais m'en sortir avec vos réponses.
Sympa à vous.
Jocelyn
Commenter la réponse de cs_jmonnier
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 6 oct. 2008 à 13:55
0
Merci
Salut,

CreateProcess, c'est bien aussi. Exemple d'attente ici.
Commenter la réponse de cs_rt15
L_art_ment 316 Messages postés vendredi 21 septembre 2007Date d'inscription 6 février 2013 Dernière intervention - 6 oct. 2008 à 21:48
0
Merci
Tient, salut rt15 

<hr />
L'Armand joue, l'arme en joug... Mon site
Commenter la réponse de L_art_ment

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.