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

Pascal Discussion :

Exécuter un programme externe et détecter sa terminaison


Sujet :

Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 12
    Points
    12
    Par défaut Exécuter un programme externe et détecter sa terminaison
    Bonjour,

    je suis débutant en pascal et j'aimerais vous poser quelques questions :

    - tout d'abord connaître la commande pour executer un fichier .exe qui se trouve sur un lecteur dvd (dont je ne connais pas forcément la lettre mais où le programme pascal se trouve).
    - ensuite savoir comment détecter qu'un programme est en cours.

    Merci d'avance !!

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 415
    Points
    59 415
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Pour pouvoir répondre à tes questions, il faudrait tout d'abord savoir si le programme qui doit en exécuter un autre ou qui doit détecter l'exécution d'un autre est un programme DOS, Windows, Linux ou autre.

    Soit dit en passant, si c'est un programme DOS, ça me semble assez mal barré.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    C'est un programme windows (.exe). Mais je pensait qu'on pouvait executer n'importe quel fichier grace a une commande simple genre exe(). Enfait mon but est de lancer une application .exe et de detecter le moment ou elle s'arrete pour continuer le programme en pascal.

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 415
    Points
    59 415
    Billets dans le blog
    2
    Par défaut
    Tu peux utiliser CreateProcess pour lancer le programme et, ensuite, utiliser GetExitCodeProcess pour détecter sa terminaison.

    Voici un tout petit exemple : le programme P1 lance le programme P2 et attend que celui-ci soit fermé :
    (syntaxe Virtual Pascal)
    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
    Program P1;
     
    Uses WinCRT, Windows;
     
    Var StartupInfo : tStartupInfo;
        ProcessInformation : tProcessInformation;
        ExitCode : DWord;
     
    Begin
      InitWinCRT;
      FillChar(StartupInfo,SizeOf(StartupInfo),0);
      StartupInfo.cb := SizeOf(StartupInfo);
      FillChar(ProcessInformation,SizeOf(ProcessInformation),0);
      Write('CreateProcess : ');
      if CreateProcess('P2.exe',Nil,Nil,Nil,True,NORMAL_PRIORITY_CLASS,Nil,Nil,StartupInfo,ProcessInformation)
         then
           begin
             WriteLn('OK');
             Write('Attente de la fermeture du processus... ');
             repeat
               GetExitCodeProcess(ProcessInformation.hProcess,ExitCode);
             until ExitCode <> STILL_ACTIVE;
             WriteLn('OK');
           end  
         else
           WriteLn('Erreur !');       
      ReadLn;
      DoneWinCRT;
    End.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Program P2;
     
    Uses WinCRT;
     
    Begin
      InitWinCRT;
      Write('Pressez Enter pour fermer ce programme... ');
      ReadLn;
      DoneWinCRT;
    End.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Merci !!

    Comment faire si le second programme n'est pas un programme que j'ai creer ? Et il me met une erreur (j'utilise dev-pascal) concernant les balises InitWinCRT; et DoneWinCRT;

    (Y a t'il moyen de recupérer Virtual pascal ?? Car je ne le trouve nul part sur la toile :s).

  6. #6
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 415
    Points
    59 415
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par leserapheen
    Comment faire si le second programme n'est pas un programme que j'ai creer ?
    Cela n'a aucune importance, ça devrait fonctionner avec n'importe quel programme

    Citation Envoyé par leserapheen
    Et il me met une erreur (j'utilise dev-pascal) concernant les balises InitWinCRT; et DoneWinCRT;
    Ces fonctions n'existent sans doute pas dans l'unité WinCRT de Free Pascal. Elles ne sont pas du tout indispensables.

    Citation Envoyé par leserapheen
    (Y a t'il moyen de recupérer Virtual pascal ?? Car je ne le trouve nul part sur la toile :s).
    http://www.softpedia.com/progDownloa...oad-17920.html
    ... et bientôt disponible en téléchargement sur Developpez.com !
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Merci ca marche impec !!

    Une derniere ptite question : comment indiquer le début du chemin de fichier d'un lecteur dvd dont je ne connais pas la lettre. En gros mon programme pascal est à la racine du dvd et mon autre programme est dans un dossier sur ce dvd. Mais je ne connais pas la lettre du lecteur...
    Et comment faire pour que le programme que tu vient de me donner se transforme en procedure avec comme variable le chemin du fichier ?

  8. #8
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 415
    Points
    59 415
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par leserapheen
    Merci ca marche impec !!

    Une derniere ptite question : comment indiquer le début du chemin de fichier d'un lecteur dvd dont je ne connais pas la lettre. En gros mon programme pascal est à la racine du dvd et mon autre programme est dans un dossier sur ce dvd. Mais je ne connais pas la lettre du lecteur...
    Si les deux programmes sont sur le même lecteur, ça ne pose pas de difficulté particulière : tu peux indiquer un chemin relatif sans préciser la lettre du lecteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \Dossier\SousDossier\ProgrammeAExecuter.exe
    Citation Envoyé par leserapheen
    Et comment faire pour que le programme que tu vient de me donner se transforme en procedure avec comme variable le chemin du fichier ?
    Ca pourrait donner quelque chose comme ceci (en permettant de passer des paramètres au programme qui est lancé) :
    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
    Function EXECUTER (Chemin, Parametres : pChar) : LongBool;
     
    Var StartupInfo : tStartupInfo;
        ProcessInformation : tProcessInformation;
        ExitCode : DWord;
     
    Begin
      FillChar(StartupInfo,SizeOf(StartupInfo),0);
      StartupInfo.cb := SizeOf(StartupInfo);
      FillChar(ProcessInformation,SizeOf(ProcessInformation),0);
      if CreateProcess(Chemin,Parametres,Nil,Nil,True,NORMAL_PRIORITY_CLASS,Nil,Nil,StartupInfo,ProcessInformation)
         then
           begin
             EXECUTER := True;
             repeat
               GetExitCodeProcess(ProcessInformation.hProcess,ExitCode);
             until ExitCode <> STILL_ACTIVE;
           end
         else
           EXECUTER := False;
    End;
    N.B. Il est possible qu'il faille déclarer l'unité Strings pour que le compilateur Free Pascal reconnaisse le type pChar.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Et il n'y aurait pas moyen de mettre un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Procedure Programme(Chemin : string);
         begin
         .
         .
         .
         if CreateProcess(Chemin,Nil,Nil,Nil,True,NORMAL_PRIORITY_CLASS,Nil,Nil,StartupInfo,ProcessInformation);
         .
         .
         .     
         end;

  10. #10
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 415
    Points
    59 415
    Billets dans le blog
    2
    Par défaut
    Avec des strings, il faut effectuer un transtypage vers le type pChar en prenant soin d'ajouter préalablement un caractère #0 à la chaîne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Chemin := Chemin + #0;
    if CreateProcess(pChar(@Chemin[1]),Parametres,Nil,Nil,True, ...
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Merci beaucoup pour ton aide Alcatîz !!

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

Discussions similaires

  1. Comment exécuter un programme externe ?
    Par spikto dans le forum Langage
    Réponses: 12
    Dernier message: 27/06/2005, 16h18
  2. faire un test sur un programme externe
    Par marieheraud dans le forum Windows
    Réponses: 3
    Dernier message: 02/09/2004, 18h32
  3. [Kylix] pb d'appel de programme externe
    Par wizwiz dans le forum EDI
    Réponses: 2
    Dernier message: 27/08/2004, 09h29
  4. [Debutant(e)]Execution d'un programme externe
    Par saidi_chahrat dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 26/08/2004, 11h35
  5. appel programme externe depuis pl/sql
    Par txouki dans le forum PL/SQL
    Réponses: 6
    Dernier message: 11/05/2004, 18h35

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