Action en arrière plan
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
Action en arrière plan
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 ?
- walkson
- Modérateur
- Messages : 1036
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: Action en arrière plan
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.
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))
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
#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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: Action en arrière plan
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
Pourquoi ne pas simplement faire plusieurs scripts ?
Utilisé pour des actions en arrière plan (donc sans contrôle visuel) ça pourrait aboutir à des résultats, disons, étranges

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 )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: Action en arrière plan
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