Vous devriez vérifier ces deux articles Microsoft KB
How to launch a Win32 Application from Visual Basic et
How To Use a 32-Bit Application to Determine When a Shelled Process Ends
Ils ont tous deux vous donnent rapidement le cadre de lancer un processus, puis vérifier son achèvement. Chacun des articles de la base de connaissances contient des références supplémentaires qui peuvent être pertinentes.
Ce dernier article de la base de connaissances suppose que vous souhaitez attendre une durée infinie pour que votre processus shell se termine.
Vous pouvez modifier le ret & = WaitForSingleObject (proc.hProcess, INFINI) appel de fonction pour revenir après un certain laps de temps fini en millisecondes - remplacer INFINI avec une valeur positive représentant millisecondes et envelopper le tout dans un Do While boucle. La valeur de retour vous indique si le processus s'est terminé ou si le délai s'est écoulé. La valeur de retour sera zéro si le processus s'est terminé.
Si la valeur de retour est différente de zéro, le processus est toujours en cours, mais le contrôle est renvoyé à votre application. Pendant ce temps, alors que vous avez un contrôle positif sur votre application, vous pouvez déterminer si vous souhaitez mettre à jour un statut d'interface utilisateur, vérifier l'annulation, etc. Ou vous pouvez faire une boucle et attendre encore plus.
Il y a même des options supplémentaires si le programme que vous utilisez est quelque chose que vous avez écrit. Vous pouvez vous connecter à l'une de ses fenêtres et faire en sorte que le programme publie des messages auxquels vous pouvez attacher et que vous utiliserez comme retour d'état. C'est probablement mieux pour un article séparé si vous avez besoin de le considérer.
Vous pouvez utiliser la structure de processus pour obtenir une valeur de retour du processus appelé. Votre processus doit renvoyer une valeur pour que cela soit utile.
Mon approche générale à ce genre de besoin est:
- donner à l'utilisateur une boîte de dialogue d'état non-modale au début du processus avec un bouton d'annulation, qui lorsque vous cliquez dessus définir un indicateur pour être vérifié plus tard. Fournir à l'utilisateur n'importe quel statut est très probablement impossible, donc leur donner un temps écoulé ou l'un de ces GIF animés pourrait être utile dans la gestion des attentes.
- démarrer le processus
- Attendez la fin du processus, ce qui permet l'annulation vérifier toutes les 500ms
- Si le processus est terminé, fermez le dialogue et continuer le long.
- Si le processus n'est pas terminé, voir si l'utilisateur a cliqué sur annuler et, le cas échéant, envoyer un message de fermeture à la fenêtre du processus. Cela peut ne pas fonctionner et terminer le processus peut être nécessaire - attention si vous faites cela. Votre meilleur pari peut être d'abandonner le processus s'il ne se ferme pas correctement. Vous pouvez également vérifier un délai d'attente à ce stade et essayer de prendre le même chemin que si l'utilisateur cliquait sur annuler.
Espérons que cela aide, Bill.
merci pour l'aide Bill. –