Page 1 sur 1

[..] Creer minuteur simple

Posté : mar. 09 mars 2010 01:08
par tuyn00txa
Bonjour, comment créer un minuteur simple sans passer par l'interface GUI , de type "ToolTip"... ?

Par exemple aller sur une page internet et après le chargement, effectuer des actions sur cette page tout en attendant 20 secondes (le minuteur se trouvant en haut sur la fenêtre).


Merci pour votre aide

Re: [..] Creer minuteur simple

Posté : mar. 09 mars 2010 10:49
par Stigmate
Bonjours, et bien vous n'avez pas besoin de passer par une GUI pour avoir un Timer dans votre programme, mais si vous désirez quant même le visualiser sans passer par votre propre GUI, essayez donc quelque chose comme sa :

Code : Tout sélectionner


$Minuteur = 20

$Init = TimerInit ()
$Compteur = 0
WinWait ("Google - Mozilla Firefox")
$TitreActuel = WinGetTitle("[ACTIVE]")

While $Minuteur <> 0
    
$Diff = TimerDiff ($Init)

; Les différentes actions du programme...

If $Diff >= ($Compteur + 1000) Then
 WinSetTitle ( $TitreActuel, "", $TitreActuel & "  [" & $Minuteur & "]" )
 $Minuteur = $Minuteur - 1
 $Compteur = $Diff
EndIf

WEnd

 
Pour cet exemple ouvrez Firefox et regardez dans la barre de titre si cela vous conviens =)
(Si vous n'avez pas Firefox remplacer le "Google - Mozilla Firefox" par le nom d'une fenêtre de votre choix et ouvrez cette fenêtre).

Adaptez tous sa à votre guise.

Re: [..] Creer minuteur simple

Posté : mar. 09 mars 2010 21:31
par tuyn00txa
C'est exactement ça que je cherchais merci Stigmate :D ...mais par contre le processeur n'aime pas trop... :?


Peut être y aurait t'il une simplification ?

Ou sinon je passerais par l'interface GUI

Re: [..] Creer minuteur simple

Posté : mar. 09 mars 2010 22:05
par pop45
Mettez un sleep dans la boucle(même un sleep (1) c'est bien)

Re: [..] Creer minuteur simple

Posté : mar. 09 mars 2010 22:30
par tuyn00txa
Merci, ça marche :D

Re: [..] Creer minuteur simple

Posté : mar. 09 mars 2010 23:00
par tuyn00txa
Il reste tout de même un petit problème que je n'arrive pas à résoudre... :?

J'ai dans les actions à effectuer des "sleep(3000)"... ce qui me fausse le minuteur car il doit attendre à ce moment là 3 secondes pour décrémenter 1 seconde dans le minuteur... :|

Re: [..] Creer minuteur simple

Posté : mer. 10 mars 2010 02:05
par Tlem
Très étonnant si vous utilisez la fonction Timer !!!
Un bout de code permettrait plus de compréhension.

Re: [..] Creer minuteur simple

Posté : mer. 10 mars 2010 13:33
par tuyn00txa
Je veux en faite effectuer plusieurs actions (pouvant durer une dizaine de secondes) jusqu'en que le minuteur arrive à 0.
Sur ce code, j'ai mis comme action d'attendre, du coup le minuteur ne décrémente pas toutes les secondes mais toutes les 4 secondes...

Code : Tout sélectionner

$Minuteur = 10
$Init = TimerInit ()
$Compteur = 0

While $Minuteur <> 0

$Diff = TimerDiff ($Init)
sleep(1)

sleep (3000)   ; action à effectuer


If $Diff >= ($Compteur + 1000) Then
 ToolTip ($Minuteur,1120,0)
 $Minuteur = $Minuteur - 1
 $Compteur = $Diff
EndIf

WEnd

Re: [..] Creer minuteur simple

Posté : mer. 10 mars 2010 14:18
par pop45
Ben vous avez un time diff de lancer alors utiliser le :D

Recupere la dates et dite lui de ne plus rien faire tan qu'il ne c'est pas ecouler 3 seconde

Et malheureusement je ne peut pas vous aider car je ne connais rien a cette fonction (jamais utiliser)

Re: [..] Creer minuteur simple

Posté : mer. 10 mars 2010 14:32
par tuyn00txa
Mais mon temps pendant laquelle se déroule les actions est supposé inconnu. Ici le "sleep(300)" était juste un exemple... Faudrait-il à ce moment là utiliser une fonction à part minuteur() qui est lancé grâce à "AdlibRegister" et qui se lance dès que ces actions commencent?

:?


Merci pour votre aide :)

Re: [..] Creer minuteur simple

Posté : mer. 10 mars 2010 15:11
par Iste
Si le temps d'execution de vos actions est plus long que le temps d'attente, en effet, vous aurez un probleme..
Lancez le code dans un nouveau process, c'est la solution la plus simple.

Re: [..] Creer minuteur simple

Posté : mer. 10 mars 2010 15:43
par tuyn00txa
Le problème reste identique avec un nouveau process pour moi (il est possible que je me trompe...) :(
Voici le code pour le programme principal (sachant que minuteur.exe "se ferme" dès que le minuteur arrive à 0)

Code : Tout sélectionner

ShellExecute("minuteur.exe")
$timer=ProcessExists("minuteur.exe")
while ($timer ==1)

; mon programme

Wend
 
Je voudrais pour le rappeler, éxecuter certains actions jusqu'en que mon minuteur arrive à 0 ,c'est à dire que mon minuteur en passant à 0, arrêterait les actions en cours même si ils n'ont pas eu le temps de finir.

Merci encore

Re: [..] Creer minuteur simple

Posté : mer. 10 mars 2010 16:08
par Tlem
Pourquoi faire compliqué ???
► Afficher le texte

Re: [..] Creer minuteur simple

Posté : mer. 10 mars 2010 17:55
par Stigmate
Oops, j'avais oublié le petit Sleep pour le cœur du pauvre PC :)

Maintenant que votre problème est un peu moins flou, et pour rester dans la même ligné que le premier code, je peu vous proposer de faire comme ceci :

Code : Tout sélectionner

$Minuteur = 20
$Compteur = 0

$Init = TimerInit ()
WinWaitActive ("Google - Mozilla Firefox")
$TitreActuel = WinGetTitle("[ACTIVE]")

While $Minuteur <> 0
   
Timer()

ToolTip ("Attente 1") ; Action du programme.
Pause(3000)
ToolTip ("Attente 2") ; Action du programme.
Pause(3000)
; ect...

Sleep (10)
WEnd


Func Timer()
$Diff = TimerDiff ($Init)
If $Diff >= ($Compteur + 1000) Then
 WinSetTitle ( $TitreActuel, "", $TitreActuel & "  [" & $Minuteur & "]" )
 $Minuteur = $Minuteur - 1
 $Compteur = $Diff
EndIf
If $Minuteur < 0 Then Exit
EndFunc

Func Pause ($Temps)
$Diff2 = TimerDiff ($Init)
Do
$Diff3 = TimerDiff ($Init)  
Sleep (1)
Timer()
Until $Diff3 >= ($Diff2 + $Temps)
EndFunc
Vous pouvez ainsi utiliser la fonction pause quant vous le souhaitez. :)
Je ne suis pas du tout le plus expérimenté alors il y a certainement mieux à faire (Etudiez la solution de Tlem !) mais sa fonctionne :o

Edit : Oops, - maintenant ! - sa fonctionne, j'ai rajouté ceci : "If $Minuteur < 0 Then Exit", sinon le minuteur continuait en dessous de 0 :P