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

Delphi Discussion :

fermeture d'une autre aplication


Sujet :

Delphi

  1. #1
    Membre actif
    Homme Profil pro
    électronique, radioamateur, retraité, jardin
    Inscrit en
    Mars 2025
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : électronique, radioamateur, retraité, jardin
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2025
    Messages : 62
    Par défaut fermeture d'une autre aplication
    bonjours a toutes et tous,
    débutant en delphi7
    apres avoir pas mal chercher sur les forum et sur le net
    je vous pose ma question :

    sauriez vous comment je pourrai fermer une autre application active depuis ma form ?
    attention: il ne sagis pas d'une autre fiche dans le meme programme mais bien d'un autre exe que j'appel depuis ma form1
    j'arrive a ouvrir un programme depuis un tbutton la pas de souci sa marche
    j'appelle mon prog """" mon-prog1.exe """"
    mais si j'essais de le refermé depuis ma form1.onclose ou depuis mon form1.button1.clic il ne se passe rien

    j'ai bien essayer de le fermé avec cette comande dans un tbutton1 mais niette rien ne se passe
    peut etre parceque le prog est en second plan ou arriere plan ?????? ou je ne trouve pas le handle ?
    je doit surement mal faire mais je ne trouve pas quoi
    pouvez vous m'aidé svp merci
    cordialement

    voici mon code actuel


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
    mon-prog1 :THandle;
    begin
      mon-prog1 := FindWindow('mon-prog1',nil); //"""" mon-prog1 """"  est le nom de mon prog ouvert a refermé
      PostMessage(mon-prog1,WM_CLOSE,0,0); // ferme la fenêtre sans confirmation 
    end;

  2. #2
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    727
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2017
    Messages : 727
    Billets dans le blog
    1
    On ne peut pas faire confiance à un code qu'on n'a pas entièrement écrit soi‑même, et encore moins à celui qu'on a écrit entièrement. :aie:

  3. #3
    Membre actif
    Homme Profil pro
    électronique, radioamateur, retraité, jardin
    Inscrit en
    Mars 2025
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : électronique, radioamateur, retraité, jardin
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2025
    Messages : 62
    Par défaut fermeture d'une autre aplication
    bonsoir gregory,
    merci pour le lien
    j'ai deja visité cette page du forum et rien compris du tout

    je voie que une autre personne a le meme probleme oui bien sur
    pourquoi en réponse y as il une fonction qui ne résou pas ce probleme de fermeture ?
    de plus la question n'est pas résolut non plus ?

    avec vous connaissance ou un bout de code utilisant wm_close ? et qui fonctionne !!!

    cordialement

  4. #4
    Membre chevronné Avatar de der§en
    Homme Profil pro
    Chambord
    Inscrit en
    Septembre 2005
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 340
    Par défaut
    Alors, première question pour comprendre le contexte: comment lances-tu le programme que tu veux fermer ?

    Sinon, tu peux aussi essayer ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.btn_closeClick(Sender: TObject);
    var
      h: HWND;
    begin
      h := FindWindow('monappli ', nil);  // monappli doit être le titre de sa fenêtre, par exemple pour notepad.exe, le titre de la fenêtre est notepad.
      if h <> 0 then
        PostMessage(h, WM_QUIT, 0, 0);
    end;

  5. #5
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    727
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2017
    Messages : 727
    Billets dans le blog
    1
    Par défaut Comment tuer un processus à partir de son nom ?
    On ne peut pas faire confiance à un code qu'on n'a pas entièrement écrit soi‑même, et encore moins à celui qu'on a écrit entièrement. :aie:

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 231
    Par défaut
    Citation Envoyé par alll1 Voir le message
    j'arrive a ouvrir un programme depuis un tbutton la pas de souci sa marche
    Je souligne cela !
    ShellExecute ou CreateProcess, tu sais que le handle retourné pourrait te servir à controler l'exe cible par son process directement !




    Faut juste lire la documentation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HWND FindWindowA(
      [in, optional] LPCSTR lpClassName,
      [in, optional] LPCSTR lpWindowName
    );
    le premier paramètre c'est la classe et le second le titre
    Tu ne fournis aucune de ce deux informations mais le nom de l'exe "mon-prog1.exe", premier élément pour deviner une confusion. Comme tu n'es pas informaticien, faut commencer par la terminologie.

    le premier lien fourni par XeGregory comme par un FindWindow avec le second paramètre alimenté et non le premier, toujours le dilemme d'utiliser la classe ou le titre ?
    Les deux étant l'idéal, le titre varie selon la langue et la version de Windows ou du programme cible (surtout si tu n'en pas l'auteur)

    C'est déjà la première chose à regarder : La notion pour une fenêtre de classe et titre

    Ensuite, le sujet cité montre une autre méthode d'énumération, au lieu des fenêtres cela passe par le processus, tu es débutant, faudrait déjà bien comprendre la différence entre Fenêtre et Process.

    Tu cherches 'mon-prog1' par ce que ton projet s'appelle "mon-prog1.exe" c'est pour cela que XeGregory a proposé une approche par le nom de l'exe associé au Process.

    Quelques exemples
    Nom Programme Classe de Fenetre "Titre de Fenetre"
    bds.exe TAppBuilder "Project1 - Delphi 10 Seattle - Unit1"
    Notepad.exe Notepad "Sans titre | Bloc-Notes"
    Project1.exe TForm1 "Form1"
    Aide via F1 - Utilisez l'I.A. - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité ! Sachez-le : l'IA remplace la très grande majorité des développeurs, pas seulement les ignares ...

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    6 008
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 6 008
    Par défaut
    Attention tout de même, si l'app cible est lancée plusieurs fois FindWindow va retourner la première fenêtre trouvée qui ne sera pas forcément la bonne.

    Mais puisque tu lances toi-même ce programme, utilise plutôt ShellExecuteEx ou CreateProcess qui permettent de mémoriser le ThreadID et ainsi d'envoyer WM_QUIT par PostThreadMessage.

    Et si on ne veut pas que l'app lancée survive à la sienne, on peut l'inclure dans un job.

  8. #8
    Membre actif
    Homme Profil pro
    électronique, radioamateur, retraité, jardin
    Inscrit en
    Mars 2025
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : électronique, radioamateur, retraité, jardin
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2025
    Messages : 62
    Par défaut fermer une autre application externe
    j'ai effectivement suivie l'idée de la fermeture par la fonction et sa fonctionne
    mon probleme est résolut merci a vous tous pour vos conseille et explication

    j'ai rajouter TlHelp32 dans uses

    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
     
    function KillProcess(const ProcessName : string) : boolean; 
    var ProcessEntry32 : TProcessEntry32; 
        HSnapShot : THandle; 
        HProcess : THandle; 
    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); 
            CloseHandle(HProcess); 
          end; 
          Break; 
        end; 
      until not Process32Next(HSnapShot, ProcessEntry32); 
     
      CloseHandle(HSnapshot); 
    end;
    //------------------------------------------------------
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     
       KillProcess('mon-prog1.exe') ;
    end;
    cordialement


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

Discussions similaires

  1. Recharger JFrame après fermeture d'une autre JFrame
    Par Jb_One73 dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 22/02/2015, 20h05
  2. [XL-2007] Actualiser listview a la fermeture d'une autre USF
    Par Biker_45 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/07/2012, 10h12
  3. [AC-2003] Fermeture d'une autre application
    Par rch05 dans le forum Sécurité
    Réponses: 4
    Dernier message: 24/09/2010, 09h20
  4. raffraichir une page à la fermeture d'une autre
    Par Sh4dow49 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/08/2008, 14h20
  5. rafraichir une page a la fermeture d une autre
    Par mereyj dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 27/03/2006, 17h21

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