Action en arrière plan

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Misa10
Niveau 4
Niveau 4
Messages : 52
Enregistré le : sam. 14 avr. 2018 12:50
Status : Hors ligne

Action en arrière plan

#1

Message par Misa10 »

Bonjour je recherche la possibilité de faire des actions en arrière plan comme la recherche par image ou recherche couleur pixel déplacement souris clique souris et plein d'autre action . Via le handlers par exemple ? Est ce que c'est possible ?
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Action en arrière plan

#2

Message par walkson »

Bonjour,
La seule méthode que je connaisse pour effectuer deux opérations simultanément, est d'utiliser un timer
Dans le code à titre d'exemple, vous avez un timer qui permet de colorer un rectangle pendant que le reste du programme lance un MsgBox puis un Array et enfin écrit dans un édit. Ces 3 opérations sont bloquantes mais ne gênent pas la coloration du rectangle.
Bien sur, vous pouvez créer d'autres taches comme la recherche d'images ou autres.
#include <Array.au3>
#include <WinAPIGdiDC.au3>
#include <WinAPIGdi.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
Global $k=0,$p = 0, $array[6]
$Gui = GUICreate("", 370, 140)
$label = GUICtrlCreateLabel('', 5, 5, 60, 60)
$edit = GUICtrlCreateEdit("", 70, 5, 280, 60,BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
$Start = GUICtrlCreateButton('star', 10, 70, 70, 25)
$Stop = GUICtrlCreateButton('stop', 170, 70, 70, 25)
GUISetState()
Global $hPic = GUICtrlGetHandle($label)
Global $hDC = _WinAPI_GetDC($hPic)
For $i = 0 To 5
   $array[$i] = $i
Next

While 1
   Switch GUIGetMsg()
       Case $Start
           _Start()
         MsgBox(0,"","")
         _ArrayDisplay($array)
         For $i = 33 To 255
            GUICtrlSetData($edit, Chr($i)," ")
            Sleep(100)
         Next


       Case $Stop
           _Stop()
       Case -3
         _WinAPI_ReleaseDC($hPic, $hDC)
           Exit
   EndSwitch
WEnd

Func _Start()
   GUIRegisterMsg(0x0113, "WM_TIMER")
   DllCall("User32.dll", "int", "SetTimer", "hwnd", $Gui, "int", 50, "int", 10, "int", 0)
EndFunc


Func _Stop()
   GUIRegisterMsg(0x0113, '')
    DllCall("user32.dll", "int", "KillTimer", "hwnd", $Gui, "int*", 50)
EndFunc

Func WM_TIMER()
   $k+=1
   If $k = 59 Then
      $p += 1
      $k = 0
   EndIf
   If $p = 60 Then _Stop()
   $c = $p * 1.6
   WinSetTitle($Gui, '', 'pixel ' &$k& '-' & $p)
   $color = _WinAPI_ColorAdjustLuma(0x0000FF, $c)
   _WinAPI_SetPixel ( $hDC, $k, $p, $color)
EndFunc
Il est préférable que l'opération dans le timer soit rapide. Ici le pixel est écrit tous les 10/1000 de seconde (DllCall("User32.dll", "int", "SetTimer", "hwnd", $Gui, "int", 50, "int", 10, "int", 0))
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Action en arrière plan

#3

Message par mikell »

Ce code est spectaculaire mais il y a quand même des fameux temps de latence
Utilisé pour des actions en arrière plan (donc sans contrôle visuel) ça pourrait aboutir à des résultats, disons, étranges :twisted:
Pourquoi ne pas simplement faire plusieurs scripts ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Misa10
Niveau 4
Niveau 4
Messages : 52
Enregistré le : sam. 14 avr. 2018 12:50
Status : Hors ligne

Re: Action en arrière plan

#4

Message par Misa10 »

Intéressant mais des temps de latence c'est pas possible . Je me suis donc intéressée au VM aujourd'hui mais sa fait lag mon pc malheureusement je vais chercher d'autres solutions
Répondre