Existe-t-il une fonction qui permet d'attendre qu'un processus ait fini de dessiner sa fenetre principale?
Merci
Existe-t-il une fonction qui permet d'attendre qu'un processus ait fini de dessiner sa fenetre principale?
Merci
Précise un peu le contexte. C'est normalement pas bien long le dessin d'une fenêtre.
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
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.
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.
Faut utiliser soit CreateProcess soit ShellExecuteEx. Faut pas oublier de libérer les handles reçus.
http://c.developpez.com/faq/vc/?page...cessWaitingEnd
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?
Ben sans code non j'ai pas d'idée.
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
avant javais ca, mais le programme se lancait pas :
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)
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)
Que vaut GV.PentazipIPathNT ?
Faut tester le code d'erreur renvoyé par GetLastError().
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"
T'as vérifié dans le gestionnaire des tâches ?
oui, mon process n'y figure pas
C'est très beaucoup bizarre, surtout si CreateProcess n'échoue pas.
ui je viens encore de verifier, createprocess me retourne 1...
ya ptet un parametre que je passe mal?
enfin jcomprends pas
Il faut lire la doc:
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.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.
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)
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...) ?
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
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...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager