NEO ::: TEAM
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

NEO ::: TEAM

New Evolution Owner
 
AccueilRechercherDernières imagesS'enregistrerConnexion
-50%
Le deal à ne pas rater :
Ampli Home Cinema Denon AVR-X1700H à 399€
399 € 799 €
Voir le deal

 

 Comment lancer et contrôler une application extérieure ?

Aller en bas 
AuteurMessage
Admin
Fondateur
Fondateur
Admin


Nombre de messages : 197
Age : 40
Localisation : Tlemcen ( Algérie )
Date d'inscription : 04/12/2006

Comment lancer et contrôler une application extérieure ? Empty
MessageSujet: Comment lancer et contrôler une application extérieure ?   Comment lancer et contrôler une application extérieure ? Icon_minitimeVen 12 Jan - 6:14

Pour lancer une application tout en récupérant son handle de process, il faut utiliser la fonction API CreateProcess. Cette fonction permet d'exécuter une ligne de commande avec un grand nombre d'options. Elles ne seront pas décrites ici car ce n'est pas le but de cette QR. Cette fonction retourne aussi les handle des process et thread principaux de l'application lancée. Cette particularité va être utilisée pour garder un contrôle sur l'application.

La ligne de commande passée à CreateProcess ne doit pas contenir d'espace dans les noms de fichiers, ou alors il faut que les noms de fichiers soient entre " ". Par défaut il est donc conseillé de mettre les " " systématiquement pour limiter les erreurs.
Code:
[/center]
procedure TForm1.Button2Click(Sender: TObject);
Var  StartInfo  : TStartupInfo;
    ProcessInfo : TProcessInformation;
    Fin        : Boolean;
begin
  { Mise à zéro de la structure StartInfo }
  FillChar(StartInfo,SizeOf(StartInfo),#0);
  { Seule la taille est renseignée, toutes les autres options }
  { laissées à zéro prendront les valeurs par défaut }
  StartInfo.cb    := SizeOf(StartInfo);

  { Lancement de la ligne de commande }
  If CreateProcess(Nil, '"Notepad.exe"', Nil, Nil, False,
                0, Nil, Nil, StartInfo,ProcessInfo) Then
  Begin
    { L'application est bien lancée, on va en attendre la fin }
    { ProcessInfo.hProcess contient le handle du process principal de l'application }
    Fin:=False;
    Repeat
      { On attend la fin de l'application }
      Case WaitForSingleObject(ProcessInfo.hProcess, 200)Of
        WAIT_OBJECT_0 :Fin:=True; { L'application est terminée, on sort }
        WAIT_TIMEOUT  :;          { elle n'est pas terminée, on continue d'attendre }
      End;
      { Mise à jour de la fenêtre pour que l'application ne paraisse pas bloquée. }
      Application.ProcessMessages;
    Until Fin;
    { C'est fini }
    ShowMessage('Terminé');
  End
  Else RaiseLastOSError;
End;[center]
Ici l'exemple ne fait qu'attendre la fin de l'application, mais le handle retourné dans ProcessInfo.hProcess peut être utilisé dans toutes les fonctions API sur les process.

Pour lancer une application avec des paramètres, il faut les insérer dans la ligne de commande :


Code:




CreateProcess(Nil,'"Notepad.exe" "c:\temp\essai.txt"'
      , Nil, Nil, False, 0, Nil, Nil, StartInfo, ProcessInfo)
CreateProcess recherche l'exécutable dans le répertoire en cours puis les répertoires par défaut de Windows, mais il est possible de spécifier le répertoire :


Code:




CreateProcess(Nil, '"C:\MesProg\MonAppli.exe"'
      , Nil, Nil, False, 0, Nil, Nil, StartInfo, ProcessInfo)
Revenir en haut Aller en bas
https://neo-team.forumactif.com
 
Comment lancer et contrôler une application extérieure ?
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Comment fermer une application externe ?
» Comment ne pas bloquer une application pendant un traitement

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
NEO ::: TEAM :: Informatique :: Les RADs :: Borland Delphi 4,5,6,7-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser