|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre chevronné
![]() |
Bonjour,
Quelqu'un pourrait-il m’expliquer en détail le code ci dessous (tout ce qu'il y a après la commande Shell). Je me sers de cette fonction dans VBA Excel pour lancer des exécutables, mais n'étant pas expert en API, j'ai du mal à tout comprendre. Code :
Merci d'avance |
||
|
|
00
|
|
|
#2 | |
![]() ![]() Inscription : février 2006 Messages : 903 ![]() |
bonjour,
Citation:
ton code vise à rendre la fonction Shell synchrone, c'est à dire que la fonction Lance_Exe ne rendra la main qu'après la fin de l'exécution du programme désigné la variable Executable ce problème ne se pose pas en VBS car la fonction Run (équivalent de Shell) possède un paramètre pour régler ce genre de besoin. il y a un paquet de codes aussi divers que variés sur le net qui propose ce genre de solution. la solution "officielle" de MS est plus élégante...
__________________
nomen omen, nemo non omen le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón) pas de questions techniques par mp |
|
|
|
10
|
|
|
#3 | ||
|
Membre chevronné
![]() |
Désolé pour la réponse tardive mais merci!
Est qu'il serait possible de détailler un peu les étapes : Code :
|
||
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : février 2006 Messages : 903 ![]() |
Waitforsingleobject permet de mettre le processus à l'arrêt dans l'attente d'un événement spécifique OU de l'expiration d'un délai précis
Dans ce code on pourrait traduire en pseudo-code par : BOUCLE AttendreFinProcessusOUFinDelai Si Pas FinDelai Sortir BOUCLE EXECUTER MSGS FENETRE (DoEvents) FIN BOUCLE
__________________
nomen omen, nemo non omen le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón) pas de questions techniques par mp |
|
|
10
|
|
|
#5 |
|
Membre chevronné
![]() |
Merci, c'est beaucoup plus clair maintenant.
Donc si j'ai bien compris: Tant que l'exe (le handle sur l’exécutable) ne change pas d'état (a fini de s’exécuter ou échoue), on boucle. Et on teste si ce changement d'état a lieu pendant 100 ms (TIMEOUT) à chaque fois. Maintenant, pourquoi faire ça pendant 100ms à chaque fois plutôt que d'attendre simplement le changement d'état?Bonne journée. |
|
|
00
|
|
|
#6 | |
![]() ![]() Inscription : février 2006 Messages : 903 ![]() |
Citation:
![]() la fonction Waitforsingleobject est économique en charge CPU puisqu'il met le proc en mode "idle" mais il bloque aussi le traitement des messages qui peuvent venir s'accumuler dans la queue aussi, pour permettre au programme de réagir à des demandes d'autres processus ou de l'utilisateur (annulation de l'action en cours par ex), il faut lui donner régulièrement le temps de lire et d'exécuter tous ces messages... c'est le rôle de l'instruction DoEvents
__________________
nomen omen, nemo non omen le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón) pas de questions techniques par mp |
|
|
|
00
|
|
|
#7 |
|
Membre chevronné
![]() |
Merci pour tous ces éclaircissements Omen.
Bonne fin de journée. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com