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

Windows Discussion :

Detecter la fin d'un programme


Sujet :

Windows

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2007
    Messages : 51
    Points : 54
    Points
    54
    Par défaut Detecter la fin d'un programme
    Bonjour (visual c++ / dev C++ : win32)
    Est-il possible de detecter la fin d'un programme
    Voici comment je commence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SHELLEXECUTEINFO execinfo; // en global
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    string parameters = "DEFAULT";
    memset(&execinfo, 0, sizeof(execinfo));
    execinfo.lpFile = "widim33_2.exe";
    execinfo.cbSize = sizeof(execinfo);
    execinfo.lpVerb = "open";
    execinfo.fMask = SEE_MASK_NOCLOSEPROCESS;
    execinfo.nShow = SW_HIDE;
    execinfo.lpParameters = parameters.c_str();
    ShellExecuteEx(&execinfo);
    Le programme principal doit continué à tourner mais c'est important qu'il sache quand est-ce l'autre à fini de tourner
    J'aimerais savoir s'il est possible de detecter la fin du programme ?
    Par exemple en analysant les messages reçus?

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Est-il possible de detecter la fin d'un programme
    Il faut utiliser CreateProcess() + WaitForSingleObject()

    voir : http://msdn2.microsoft.com/en-us/library/ms682512.aspx

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2007
    Messages : 51
    Points : 54
    Points
    54
    Par défaut
    Merci de ta réponse,
    Mais cela ne résous pas mon problème.
    Effectivement, j'avais couplée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ShellExecuteEx()
    WaitForSingleObject()
    La fenêtre de l'application principal (fenêtre windows win32) se fiche et attend que le programme ms-dos se termine.
    Le problème c'est que sur ma fenêtre windows il y a un boutton arreté. Et donc avec WaitForSingleObject(), il est innutilisable.
    Y a-t-il une solution?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je vois deux solutions :
    • Mettre WaitForSingleObject() avec un timeout nul + Un timer --> On n'est pas notifié immédiatement (seulement lorsque le timer se déclenche) mais on peut s'en contenter facilement).
    • Utiliser MsgWaitForMultipleObjects() dans sa boucle de messages au lieu de GetMessage() et s'amuser avec -> On est prévenu immédiatement mais ça relève un peu de l'usine à gaz, et ce n'est pas compatible avec les boîtes de dialogue...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2007
    Messages : 51
    Points : 54
    Points
    54
    Par défaut
    Ta première solution, WaitForSingleObject() + timer, me tente assez mais je ne comprend pas trop ce que tu veux dire. Je ne vois pas comment l'implémenter(dans la logique). Sinon je vais de ce pas voir comment timer fonctionne.
    Merci

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Un petit SetTimer() sur ta fenêtre, puis tu traites le message WM_TIMER.
    Ainsi, toutes les secondes par exemple, ton application vérifie si le programme s'est terminé ou non...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    La solution de Médinoc est la plus simple donc la plus enviable ; sinon il y aurait quelque chose de plus pointu à mettre en oeuvre c'est de passer par le API Hooking.
    En 2 mots on regarde si le programme que l'on scrute appelle PostQuitMessage() ou bien envoie les messages comme WM_DESTROY,WM_QUIT....
    c'est une idée.
    Pour le API Hooking il y avait un message à ce sujet y'a pas longtemps..

  8. #8
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2007
    Messages : 51
    Points : 54
    Points
    54
    Par défaut
    Merci les gars
    Je vais prendre l'idée de Médinoc

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

Discussions similaires

  1. detection evenement fin d'execution
    Par suckthewindow dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 18/07/2006, 18h32
  2. detection de fin de session
    Par elan_gi dans le forum Langage
    Réponses: 18
    Dernier message: 23/06/2006, 12h39
  3. iterator.end() ne detecte pas fin de la string
    Par cyclone3 dans le forum C++
    Réponses: 27
    Dernier message: 12/06/2006, 10h13
  4. [Débutant][ThreadGroup] Détecter la fin de toutes les tâches
    Par onlytoine dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 19/09/2005, 10h47
  5. Detecter la fin d'un ecran de veille
    Par fredderf dans le forum MFC
    Réponses: 12
    Dernier message: 13/06/2005, 17h08

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