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 :

Fermer une Application Externe


Sujet :

Langage Delphi

  1. #1
    Invité(e)
    Invité(e)
    Par défaut Fermer une Application Externe
    Bonsoir,

    Je n'arrive pas à forcer la fermeture d'une application externe depuis Delphi quand je lance cet .exe

    Je récupéré ce code depuis la FAQ. J'ai essayé de déclarer une constante pour lui demander de fermer Internet Explorer. Mais je n'arrive pas au résultat escompté.

    Merci d'avance pour votre aide,

    Arnaud

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    unit KillProc;
     
    interface
     
    uses
      Windows, SysUtils, TlHelp32;
     
    function KillProcess(const ProcessName : string; All : boolean = False) : boolean;
     
    implementation
     
    function KillProcess(const ProcessName : string; All : boolean = False) : boolean;
    var ProcessEntry32 : TProcessEntry32;
        HSnapShot : THandle;
        HProcess : THandle;
     
        const ProcessName = 'iexplore.exe';
     
    begin
      Result := False;
     
      HSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
      if HSnapShot = 0 then exit;
     
      ProcessEntry32.dwSize := sizeof(ProcessEntry32);
      if Process32First(HSnapShot, ProcessEntry32) then
      repeat
        if CompareText(ProcessEntry32.szExeFile, ProcessName) = 0 then
        begin
          HProcess := OpenProcess(PROCESS_TERMINATE, False, ProcessEntry32.th32ProcessID);
          if HProcess <> 0 then
          begin
            Result := TerminateProcess(HProcess, 0) or Result;
            CloseHandle(HProcess);
          end;
          if not All then Break;
        end;
      until not Process32Next(HSnapShot, ProcessEntry32);
     
      CloseHandle(HSnapshot);
    end;
     
    end.
    Dernière modification par Cl@udius ; 14/12/2010 à 17h42.

  2. #2
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 290
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 290
    Points : 1 941
    Points
    1 941
    Par défaut
    Essaie un GetLastError pour savoir pourquoi TerminateProcess a échoué.

  3. #3
    Membre habitué Avatar de abdelghani_k
    Inscrit en
    Octobre 2002
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Octobre 2002
    Messages : 184
    Points : 150
    Points
    150
    Par défaut
    ce n'est pas juste d'utiliser en paramètre ProcessName et de la mettre à l'intérieur de la fonction comme const.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function KillProcess(const ProcessName : string; All : boolean = False) : boolean;
    var ProcessEntry32 : TProcessEntry32;
        HSnapShot : THandle;
        HProcess : THandle;
     
        const ProcessName = 'iexplore.exe';
    tu supprimes cette ligne de la fontion KillProcess:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     const ProcessName= 'iexplore.exe';
    et fais un appel de la fonction comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     KillProcess('iexplore.exe');

  4. #4
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 374
    Points : 3 152
    Points
    3 152
    Par défaut
    Bonjour,

    j'utilise ce code qui renvoie True ou False si cela a fonctionné ou non :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    { ============================================================================== }
    function ExeRunning(NomApplication : string; StopProcess:Boolean):Boolean;
    //Test si une application est en cours d'exécution
    // StopProcess indique si on termine l'application 'NomApplication'
    var
       ProcListExec : TProcessentry32;
       PrhListExec : Thandle;
       Continu : Boolean;
       isStarted : Boolean;
       HandleProcessCourant : Cardinal;   
       PathProcessCourant : string;
       ProcessCourant :String;
     
    begin
       // Liste des applications en cours d'exécution
       // Initialisation des variables et récuperation de la liste des process
       ProcListExec.dwSize:=sizeof(ProcListExec);
       Continu := True;
       isStarted := False;
     
     Try
        // Récupére la liste des process en cours d'éxécution au moment de l'appel
       PrhListExec:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
       if (PrhListExec <> INVALID_HANDLE_VALUE)
        then
        begin
         //On se place sur le premier process
         Process32First(PrhListExec,ProcListExec);
     
           // Tant que le process recherché n'est pas trouvé et qu'il reste
           // des process dans la liste, on parcourt et analyse la liste
         while Continu do
         begin
           ProcessCourant := Uppercase(ExtractFileName(ProcListExec.szExeFile));
    //       ShowMessage(Processcourant) ;
           ProcessCourant := ChangeFileExt(ProcessCourant,'');
           isStarted := (ProcessCourant = Uppercase(NomApplication));
           if isStarted then
            begin
             HandleProcessCourant := ProcListExec.th32ProcessID;
             PathProcessCourant := ExtractFilepath(ProcListExec.szExeFile);
             Continu := False;
            end
           else // Recherche le process suivant dans la liste
             Continu := Process32Next(PrhListExec,ProcListExec);
         end;
     
         if StopProcess
          then
           if isStarted then
            begin  // Termine le process en indiquant le code de sortie zéro
             TerminateProcess(OpenProcess(PROCESS_TERMINATE,False,HandleProcessCourant),0);
             Sleep(500); // Laisse le temps au process en cours de suppression de s'arrêter
            end;
       end;
     Finally
       CloseHandle(PrhListExec); // Libére les ressources
       Result := isStarted;
     end;
    end;
     
    { ============================================================================== }
    avec "NomApplication" récupéré dans le gestionnaire de tâche de Windows sans l'extension ".exe"

    par exemple pour PowerPoint : "POWERPNT"

    Cordialement

    Charly

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Un très très grand MERCI pour vos réponses !!!

    Merci certes très tardif et je m'en excuse.

    Merci encore pour votre aide,

    Arnaud

Discussions similaires

  1. Comment fermer une fenêtre externe à l'application ?
    Par Matt2094 dans le forum Delphi
    Réponses: 8
    Dernier message: 30/08/2006, 16h52
  2. Fermer une application Windows
    Par telecnop dans le forum Langage
    Réponses: 20
    Dernier message: 28/06/2006, 21h15
  3. Fermer une application externe
    Par jean tof dans le forum C++Builder
    Réponses: 2
    Dernier message: 02/05/2006, 16h18
  4. [VB6]Fermer une application avec VB
    Par Mylou dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 04/04/2003, 21h32
  5. Fermer une application à l'aide de OnIdle
    Par Thierry Rapp dans le forum Composants VCL
    Réponses: 2
    Dernier message: 29/08/2002, 12h44

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