Action en arrière plan

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

Action en arrière plan

#1

Message par Misa10 » ven. 09 août 2019 14:58

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 : 730
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

Re: Action en arrière plan

#2

Message par walkson » ven. 09 août 2019 17:44

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

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5892
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Action en arrière plan

#3

Message par mikell » ven. 09 août 2019 18:52

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 3
Niveau 3
Messages : 42
Enregistré le : sam. 14 avr. 2018 11:50
Status : Hors ligne

Re: Action en arrière plan

#4

Message par Misa10 » sam. 10 août 2019 16:54

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