2010-05-18 3 views
1

J'écris un programme avec C++ et une API Win32 native. Je crée un processus à partir d'une archive SFX EXE en mode silencieux qu'aucune interface graphique n'est montrée à l'utilisateur. Mais je veux montrer une barre de progression dans mon application, pendant l'extraction de l'archive SFX.Affichage d'une barre de progression pendant l'extraction de l'archive SFX

Comment puis-je faire cela?

Merci.

Répondre

1

Si le processus que vous créez génère une sortie textuelle vers la sortie standard, vous pouvez probablement analyser cette sortie et afficher la progression. Pour savoir si c'est le cas, activez-le dans une fenêtre de ligne de commande et regardez ce que vous en obtenez. Le CreateProcess() de win32 vous permet de rediriger la sortie standard du processus vers un tube. De cette façon, vous pouvez recevoir la sortie dès qu'elle est produite.

Si le processus que vous créez ne signale pas sa progression d'une façon ou d'une autre, alors vous ne pouvez pas vraiment faire grand-chose. Vous pouvez essayer de trouver une fonction entre la taille du fichier et le temps moyen nécessaire pour l'extraire, puis fausser une barre de progression. Cela servira à mettre l'esprit de l'utilisateur à l'aise, mais rien de plus.

- Modifier
L'appel à CreateProcess() retours dès que le processus est créé. CreateProcess() remplit la structure PROCESS_INFORMATION avec les poignées du processus qu'il crée. il contient le handle du thread principal du processus. Si vous voulez attendre que le processus se termine, vous pouvez WaitForSingleEvent() sur ce handle de thread qui est signalé lorsque le thread se termine. Ne pas oublier de CloseHandle() ces poignées lorsque vous avez terminé avec eux.

+0

D'accord, merci. Juste une question de plus, savez-vous comment empêcher la barre de progression de s'arrêter après l'exécution de la fonction CreateProcess()? Il verrouille mon processus (ce qui est quelque chose que je voudrais, parce que je veux supprimer le EXE exécuté après qu'il se termine). – frbry

+0

Voir édition. Un moyen commun d'exprimer des remerciements dans ce site est d'upvote la réponse et peut-être même l'accepter. – shoosh