DoEvents

Trainkill666 Messages postés 52 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 5 mai 2008 - 5 sept. 2003 à 13:26
Tilois Messages postés 721 Date d'inscription dimanche 10 juin 2001 Statut Membre Dernière intervention 27 mars 2011 - 5 sept. 2003 à 21:39
Je ne connais pas grand chose sur le DoEvents
voici mon code :

Shell "C:\Program Files\Sygate\SPF\smc.exe -start"
DoEvents
SendKeys "ALT" & "F4", True
DoEvents
SendKeys "ALT" & "F4", True
DoEvents
Shell "rundll32.exe rnaui.dll,RnaDial " & "connexion", 1
DoEvents
SendKeys "{enter}", True
DoEvents

j'y ai mis DoEvents à chaque fois mais est ce que c'est vraiment utile, surtout pour le sendkeys ???
merci à l'avance...

4 réponses

jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
5 sept. 2003 à 13:38
Windows est un OS Multi-tâche... (bien que la notion de multi-tâche préamptif prenne vraiment son sens à partir de NT4 puis avec 2000 et XP).
C'est à dire que tu peux lancer plusieurs programmes en même temps et que ces programmes vont s'exécutet simultanément... enfin pas tout à fait, car avec un unique processeur, tu ne pourras effctuer qu'instruction par instruction.
Quand un programm est lançé (chargé en mémoire vive dans la RAM de ton PC), on parle de processus.
Windows donne des priorités aux processus et exécute des morceaux de processus (morceaux de code d'un programme) en fonction de la priorités des process (il y a une file d'attente des process en fonction de leur priorité).
Ainsi, on a l'impression que les programmes s'exécute en même temps, simultanément... (du moins on a cette impression sous NT4, 2000 et XP, mais beaucoup moins sous 98 ;)...

DoEvents sert simplement à laisser la main aux autres processus de manière à "laisser respirer Windows" ou à lui laisser la possiblité de traiter une autre tâche (un autre processus).

DoEvents est principalement utile dans les boucles d'attente du style :

************
bWait = True

Do While bWait
DoEvents
Loop
************

Car si tu ne met pas DoEvents, ton système va être bloqué jusqu'à ce que bWait soit mis à FALSE quelque part dans ton code (dans l'évenement DataArrival d'un control Winsock par exemple)...

Tu peux aussi utiliser DoEvents dans d'autre cas...

Je ne vois pas trop l'interêt de mettre DoEvents après chaque instruction... mais c'est une possibilité...
Ton programme sera plus lent, mais il marchera bien quand plein d'autres programmes seront lançés...

Jockos
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
5 sept. 2003 à 13:40
Doevents demande simplement à VB de vider les buffers d'entrée/sortie. Càd qu'avant de passer à la suite du programme, il va repeindre toutes les fenêtres/controles de ton appli et traiter toutes les touches/clic de souris que tu as pu faire alors que l'appli aurait été gelée par une opération un peu longue.
Je penses donc que ce n'est pas ce que tu veux... Je penses que tu veux attendre que ton pare-feu Sygate soit ouvert avant de lui envoyer des combinaisons de touches ... DoEvents ne sera sans doute pas valable.
Il va falloir gérer cela autrement, et j'avoue ne pas savoir comment exactement !!

Christophe R.
0
RicoNuch Messages postés 140 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 16 décembre 2006
5 sept. 2003 à 14:59
Hello !

La fonction API WaitForSingleObject permet d'attendre l'exécution complète d'une instruction. En l'occurence, elle pourrait permettre de s'assurer que le programme concerné a bien démarré avant de lancer les SendKeys. C'est plus sûr que DoEvents qui n'est à mon avis pas destiné à cette tâche.

RicoNuch
0
Tilois Messages postés 721 Date d'inscription dimanche 10 juin 2001 Statut Membre Dernière intervention 27 mars 2011 7
5 sept. 2003 à 21:39
Doevents est bien derriere les sendkeys, ca donne le tmps necessaire au système pour les interprété ...
0
Rejoignez-nous