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 :

[API Windows]Attendre qu'une fenetre soit dessinee


Sujet :

Windows

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut [API Windows]Attendre qu'une fenetre soit dessinee
    Existe-t-il une fonction qui permet d'attendre qu'un processus ait fini de dessiner sa fenetre principale?
    Merci

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Précise un peu le contexte. C'est normalement pas bien long le dessin d'une fenêtre.

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    en fait je lance une application, et elle met du tps a se charger...le probleme c'est que le code qui suit, en l'occurence des findwindow, necessitent que la fenetre soit dessinee

    tant qu'on y est... ^^
    une fois que cette appli est lancee, je dois emuler des clic sur certains boutons... comment je peux faire ca? g regarde les messages WM_ ... ya pas ske je veux...faudrait que jemule des saisies clavier
    merci

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Non, FindWindow nécessite juste que la fenêtre existe, et donc soit créée, ce qui peut effectivement mettre un certain temps lors de l'initialisation du programme.
    Personnelement, je commence par attendre que le processus lancé se calme via WaitForInputIdle, puis je tente le FindWindow. S'il échoue, je le retente toutes les secondes jusqu'à ce qu'il réussisse, dans la limite d'un certains nombre max d'essais.

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    J aurai voulu savoir comment trouver le handle du process quand je le lance avec ShellExecute ?
    car jai verifie, mon processus se lance directement, mais sa fenetre principale mets du temps... pour le moment je tourne avec un sleep(15000) mais c'est pas tres propre, et jaimerai utiliser le waitforinputidle aussi, mais j'ai pas le handle du processus.

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Faut utiliser soit CreateProcess soit ShellExecuteEx. Faut pas oublier de libérer les handles reçus.
    http://c.developpez.com/faq/vc/?page...cessWaitingEnd

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    le pb c'est que l'application ne se lance pas avec CreateProcess je comprends pas pkoi, et j'ai pas ShellExecuteEx() dans ma liste de fonctions de l'api Win32.
    Si je pouvais y arriver avec CreateProcess, ca serai impec...
    tu sais pas ce qui bloque le lancement de lappli dans CreateProcess, mais pas dans ShellExecute par hasard?

  8. #8
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Ben sans code non j'ai pas d'idée.

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    je code en VB aussi... si je post du VB on va mjetter
    tant pis jprends le risque, et tfacon pour le peu de code c'est pareil que C++ :

    actuellement j'ai ca, et ca marche, mais bon je dois faire un Wait de 15 secondes... c'est sale comme methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        hwnd = ShellExecute(0, "open", GV.PentazipIPathNT, vbNullString, vbNullString, SW_SHOW)
        Wait (15)
    avant javais ca, mais le programme se lancait 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
        Dim pInfo As PROCESS_INFORMATION
        Dim sInfo As STARTUPINFO
        Dim sNull As String
        Dim lSuccess As Long
        Dim lRetValue As Long
        sInfo.cb = Len(sInfo)
    
        lSuccess = CreateProcess(sNull, _
                                     GV.PentazipIPathNT, _
                                     ByVal 0&, _
                                     ByVal 0&, _
                                     1&, _
                                     NORMAL_PRIORITY_CLASS, _
                                     ByVal 0&, _
                                     sNull, _
                                     sInfo, _
                                     pInfo)

  10. #10
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Que vaut GV.PentazipIPathNT ?
    Faut tester le code d'erreur renvoyé par GetLastError().

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    je viens de placer un getlasterror juste apres le createprocess : resultat de getlasterror = 0 ...
    et l'application ne se lance tjs pas

    quant a GV.PentazipIPathNT il vaut :
    "C:\Program Files\PentaWare\PentaZip\7.5\Main\choZip.exe"

  12. #12
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    T'as vérifié dans le gestionnaire des tâches ?

  13. #13
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    oui, mon process n'y figure pas

  14. #14
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    C'est très beaucoup bizarre, surtout si CreateProcess n'échoue pas.

  15. #15
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    ui je viens encore de verifier, createprocess me retourne 1...
    ya ptet un parametre que je passe mal?
    enfin jcomprends pas

  16. #16
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Il faut lire la doc:
    Return Values
    If the function succeeds, the return value is nonzero.

    If the function fails, the return value is zero. To get extended error information, call GetLastError.
    donc la fonction réussie, donc le process est créé. Ton erreur est ailleurs, sûrement dans les paramètres donnés au process qui n'est pas content et se termine tout de suite.

  17. #17
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    ue mais la jvois pas...ca se lance avec ShellExecute() et pas CreateProcess()...
    enfin, jvais rester avec mon ShellExecute()...
    et est ce que je peux recuperer le handle du thread cree par le processus issu du ShellExecute()? ou je dois obligatoirement passer par CreateProcess ( qui marchepas) ou ShellExecuteEx() (que jai pas dans l API)

  18. #18
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Trouve la déclaration de ShellExecuteEx. Sinon tu peux pas.
    T'as pas moyen de savoir si le prog est lancé (lance un autre prog genre notepad, enlève les paramètres...) ?

  19. #19
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    Jviens de trouver la declaration de ShellExecuteEx, jvais voir ca de plus pres...
    sinon CreateProcess marche niquel avec Notepad, Internet Explorer... mais pas Pentazip (le prog que je tente de lancer)
    Mais je vais voir avec ShellExecuteEx... a suivre

  20. #20
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Je persiste à penser que ça marche, et que c'est ton programme Pentazip qui n'est pas content. Cherche de son côté (répertoire courant, options de ligne de commande, mauvais chemin, ...).
    Mais si tu as ShellExecuteEx...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/04/2014, 09h17
  2. Window.Close() sur une fenetre fille ferme l'application
    Par MonsieurHelmut dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 30/10/2009, 16h59
  3. Réponses: 19
    Dernier message: 13/01/2008, 23h33
  4. Attendre qu'une fenetre soit fermée avant de continuer.
    Par parp1 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/05/2007, 17h43
  5. Attendre qu'une tâche soit terminée avant d'en lancer une autre
    Par guidav dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/04/2007, 17h07

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