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 toutes applications ouvertes


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Points : 72
    Points
    72
    Par défaut Fermer toutes applications ouvertes
    Bonjour,
    Je souhaite pouvoir par un click de bouton fermer proprement toutes applications ouvertes sur mon ordi. Est-il possible de le faire de façon simple?
    Merci pour toute réponse.

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    J'utilise ca dans une de mes applications :
    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
    var
       nSnapShot: Integer;
       FProcessEntry32: TProcessEntry32;
    begin
       Result := 0;
     
       nSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
     
       //.Si erreur.
       if nSnapShot = -1 then
          Exit;
     
       FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
       if Process32First(nSnapShot, FProcessEntry32) then
       begin
          repeat                            
             //.Si application recherchée.
             if AnsiLowerCase(ExtractFileName(FProcessEntry32.szExeFile)) = 'App_test' then
             begin
                //.Suppression du processus. 
                if not TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0) then
                   Inc(Result);
             end;
          until not Process32Next(nSnapShot, FProcessEntry32);
       end;
     
       CloseHandle(nSnapShot);
    end;
    Ca peut peut-être t'aider ...

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Points : 72
    Points
    72
    Par défaut
    Merci Lung pour ta réponse, mais si tu peux faire quelques commentaire...
    Par ex. j'ai une application qui tourne, je veux fermer propremment cette application, tout en enregistrant les fichiers ouverts pour ne pas perdre des données...

  4. #4
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par kikica
    Par ex. j'ai une application qui tourne, je veux fermer propremment cette application, tout en enregistrant les fichiers ouverts pour ne pas perdre des données...
    Là ca se complique ...
    Mon bout de code ferme (sans poser de question, les applications).
    Pour ce que tu cherches, je ne sais pas ...

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Points : 72
    Points
    72
    Par défaut
    Merci. Ce code ferme TOUTES applications ouvertes? Faut-il préciser le NOM des applications? Que mettre dans "USES"?

  6. #6
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par kikica
    Merci. Ce code ferme TOUTES applications ouvertes? Faut-il préciser le NOM des applications?
    Pour tester, remplace la partie qui supprime par de l'affichage des exe trouvé. Tu pourra voir la liste. Par exemple, avec un TRichEdit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       if Process32First(nSnapShot, FProcessEntry32) then 
       begin 
          repeat                            
             RichEdit.Lines.Add(ExtractFileName(FProcessEntry32.szExeFile));
          until not Process32Next(nSnapShot, FProcessEntry32); 
       end;
    Citation Envoyé par kikica
    Que mettre dans "USES"?
    Tlhelp32
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Points : 72
    Points
    72
    Par défaut
    Est-tu sûr que ce côde fonctionne? Je n'arrive pas à compiler ce côde.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Identificateur non déclaré:TProcessEntry32
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Identificateur non déclaré:result
    etc...
    ps. Peux-tu faire un copier-collé du côde qui fonctionne?
    Merci d'avance.

  8. #8
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Tlhelp32, StdCtrls, ComCtrls;
    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
       nSnapShot: Integer;
       FProcessEntry32: TProcessEntry32;
    begin
       nSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
     
       //.Si erreur.
       if nSnapShot = -1 then
          Exit;
     
       FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
       if Process32First(nSnapShot, FProcessEntry32) then
       begin
          repeat
             RichEdit.Lines.Add(ExtractFileName(FProcessEntry32.szExeFile));
          until not Process32Next(nSnapShot, FProcessEntry32);
       end;
     
       CloseHandle(nSnapShot);
    end;
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  9. #9
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par kikica
    Par ex. j'ai une application qui tourne, je veux fermer propremment cette application, tout en enregistrant les fichiers ouverts pour ne pas perdre des données...
    C'est l'application cible qui doit gérer cette situation.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Points : 72
    Points
    72
    Par défaut
    Yess! L'affichage dans "richedit" fonctionne parfaitement. Maintenant, lorsque je fais un copier-coller du côde:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    FProcessEntry32.dwSize := SizeOf(FProcessEntry32); 
       if Process32First(nSnapShot, FProcessEntry32) then 
       begin 
          repeat                            
             //.Si application recherchée. 
             if AnsiLowerCase(ExtractFileName(FProcessEntry32.szExeFile)) = 'App_test' then 
             begin 
                //.Suppression du processus. 
                if not TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0) then 
                   Inc(Result); 
             end;
    J'ai à nouveau l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Identificatoeur non déclaré:"Result"
    Donc, j'ai rajouté dans et ça compile, mais avec un avertissement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    La valeur affecté à 'result' n'est jamais utilisé
    Et alors, rien ne se passe!

  11. #11
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Le code donné par Lung est une fonction pas une procédure donc pas besoin de déclarer Result en variable locale.
    A moins que dans ton cas tu ne souhaites pas connaitre le nb de process terminés par ce traitement.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Points : 72
    Points
    72
    Par défaut
    En effet, je veux simplement par un click du buton fermer toutes applications ouvertes. Si je mets ce code dans un bouton, j'ai une procédure. Donc, je suis bien obligé d'y rajouter "result" dans var. Le problème c'est que j'obtiens toujours l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    La valeur affecté à 'result' n'est jamais utilisé
    et rien ne se passe!

  13. #13
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Si result (nombre d'appli fermées) ne sert à rien, écrire simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0) ;
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Points : 72
    Points
    72
    Par défaut
    Merci, ça marche maintenant!

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

Discussions similaires

  1. Fermer une application ouverte par code
    Par kracter56 dans le forum MATLAB
    Réponses: 2
    Dernier message: 08/03/2013, 14h08
  2. Réponses: 2
    Dernier message: 17/07/2011, 12h16
  3. Réponses: 6
    Dernier message: 04/06/2006, 19h02
  4. [VB6] fermer application ouverte avec shellexecute
    Par prodi_64 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 24/04/2006, 17h36
  5. [ActionPerformed] Fermer toute l'application
    Par Invité dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 14/03/2006, 11h53

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