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

MFC Discussion :

[MFC] attendre fin de demarrage d'un processus


Sujet :

MFC

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Points : 126
    Points
    126
    Par défaut [MFC] attendre fin de demarrage d'un processus
    Salut

    Est ce que quelqu'un sait comment attendre qu'un processus soit entierement demarre?

    Ce processus est lance par ShellExecute.

    Merci

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    tu peux detecter s'il est terminé, mais je pense pas qu'on puisse savoir s'il est entierement chargé, vu que ca dépend du processus.

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Points : 126
    Points
    126
    Par défaut
    Un processus (par ex word) n'emet pas un signal ou un truc pour dire qu'il est demarre

  4. #4
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Citation Envoyé par pitch21
    Un processus (par ex word) n'emet pas un signal ou un truc pour dire qu'il est demarre
    Non
    Sauf peut être en utilisant COM pour ouvrir tes documents WORD au lieu de shellExecute (c une supposition)

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Points : 126
    Points
    126
    Par défaut
    Je sais pas si c'est fort astucieux mais on peut pas utiliser le Create Process et apres utiliser la methode WaitForInputIdle???? Car il est dit dans la msdn :

    The calling thread can use the WaitForInputIdle function to wait until the new process has finished its initialization and is waiting for user input with no input pending. This can be useful for synchronization between parent and child processes, because CreateProcess returns without waiting for the new process to finish its initialization. For example, the creating process would use WaitForInputIdle before trying to find a window associated with the new process.

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    y a plus qu'à essayer alors ...

  7. #7
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Bon, je viens d'essayer ca, mais ca marche pas des masses ... je pense que c'est quand meme dépendant du process, et de sa facon de dire s'il est idle ou pas.

    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
    	STARTUPINFO si;
        PROCESS_INFORMATION pi;
     
        ZeroMemory( &si, sizeof(si) );
        si.cb = sizeof(si);
        ZeroMemory( &pi, sizeof(pi) );
     
        // Start the child process. 
        if( !CreateProcess( NULL, 
            "C:\\Program Files\\Microsoft Visual Studio .NET 2003\\Common7\\IDE\\devenv.exe", 
            NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ) ) 
        {
            MessageBox(NULL,"CreateProcess raté","",MB_ICONSTOP);
        }
     
    	WaitForInputIdle(pi.hProcess,INFINITE);
    	MessageBox(NULL,"Chargé","",MB_ICONSTOP);
    	CloseHandle( pi.hProcess );
        CloseHandle( pi.hThread );
    Avec Word, je peux pas trop essayer, ca se charge un peut trop vite pour voir...

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Points : 126
    Points
    126
    Par défaut
    J'ai essaye avec le ShellExecuteEx et j'ai donné le hprocess à la méthode WaitInputIdle avec comme toi le param INFINITE et c pas ce que j'attends. La methode debloque plus tot que tt soit initialise

    Tu connais pas une autre méthode peut etre?

  9. #9
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Points : 126
    Points
    126
    Par défaut
    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
     
    	SHELLEXECUTEINFO m_ShellExecuteInfo;
    	memset(&m_ShellExecuteInfo, 0, sizeof(m_ShellExecuteInfo));
     
    	m_ShellExecuteInfo.cbSize = sizeof(m_ShellExecuteInfo);
    	m_ShellExecuteInfo.fMask = SEE_MASK_NOCLOSEPROCESS;                
    	m_ShellExecuteInfo.hwnd = 0;                
    	m_ShellExecuteInfo.lpVerb = "open";                      
    	m_ShellExecuteInfo.lpFile = "C:/Program Files/Microsoft Visual Studio .NET 2003/Common7/IDE/devenv.exe";
    	m_ShellExecuteInfo.lpParameters = 0;
    	m_ShellExecuteInfo.lpDirectory = 0;
    	m_ShellExecuteInfo.nShow = SW_SHOW;
    	m_ShellExecuteInfo.hInstApp = 0;    
     
    	ShellExecuteEx(&m_ShellExecuteInfo);
     
    	WaitForInputIdle(m_ShellExecuteInfo.hProcess,INFINITE);
    Helas ca debloque trop vite

  10. #10
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    j'ai pas vraiment de solutions miracles, désolé. On peut peut-etre faire qqchose mais ca dépend de ton application.
    J'ai vu rapidement que c'était pas word que tu voulais ouvrir, et si il y a une fenetre, tu peux essayer de faire un findwindow jusqu'à ce que tu trouves ta fenetre. Si c'est une application perso, c'est encore plus simple en envoyant un message dès que c'est initialisé.

    Sinon, tu peux aussi d'essayer de hooker les créations de fenetres avec WH_SHELL ou bien WH_CBT.

  11. #11
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Points : 126
    Points
    126
    Par défaut
    j'ai peur que le titre de la fenetre soit initialisé avant que tt soit charge. En fait moi c'est un programme d'animation 3D que je lance et il faut que j'attende qu'il soit lance et surtout qu'il aye chargé entierement l'animation voulue. Helas ce logiciel n'est pas a moi donc je ne sais pas lui dire envoi un signal

  12. #12
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    regarde peut-etre du coté des hooks que je t'ai indiqué.

    ou alors, si il y a une fenetre (genre barre d'outil) qui se lance à la fin, essaye de reperer sa classe avec spy++ pour faire un findwindow dessus

  13. #13
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Points : 126
    Points
    126
    Par défaut
    En fait je viens de tester le lancement du logiciel sans ouvrir d'animation et le méthode WaitForInputIdle detecte +/- bien quand elle est demarree mais donc elle est incapable de savoir si un chargement est termine.

    Pour ce qui est de detecte une barre d'outil ou quoi bin j'en vois pas car tt est charge au demarrage et puis quand il y a chargement de l'animation, il n'y a rien qui change a part l'anim qui se met en place et de petit parametre par ci par la. Est ce suffisant?? Car je connais Spy++ juste de nom lol

  14. #14
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    j'essaierai de trouver un peu de temps cet aprem pour faire un essai avec un hook pour voir ce que ca donne. Je te tiendrai au courant

  15. #15
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Points : 126
    Points
    126
    Par défaut
    Je te remercie nico-pyright(c) , je ferai des tests aussi mais je fignole mon prog et puis je passe mon temps a ca.

  16. #16
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Points : 126
    Points
    126
    Par défaut
    Lut juste pour dire que le probleme a ete resolu par le fait que des que mon animation est lancee, j'envoi une note MIDI à mon programme pour qu'il puisse demarre. SInon j'ai tjs pas trouve d'autre moyen.

  17. #17
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Salut
    Tant mieux, j'avais fait rapidement des tests de mon coté, et ca n'avait guere été concluant...

    a+

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

Discussions similaires

  1. Attendre fin d'exécution d'un processus sous vb6
    Par dev-man dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 24/08/2007, 13h32
  2. [Vista]Comment attendre la fin d'exécution d'un processus ?
    Par gb_68 dans le forum Threads & Processus
    Réponses: 9
    Dernier message: 15/06/2007, 23h17
  3. attendre fin root
    Par cada01a dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 12/06/2006, 18h29
  4. attendre fin opération
    Par Seb4657 dans le forum Langage
    Réponses: 4
    Dernier message: 05/02/2006, 15h25
  5. [MFC] Attendre l'arrêt d'un processus !!
    Par Djoz dans le forum MFC
    Réponses: 6
    Dernier message: 29/07/2003, 12h03

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