Bonjour,
Il nous est tous arrivé de fantasmer sur Autoit dans la voiture en se rendant au travail, de se dire « et si telle fonction existait, qu’est-ce que ça changerai, elle serait utilisée ? Elle répondrait à telle ou telle problématique? », et de se rendre compte qu’on n’a pas le niveau un peu comme avec certaines femmes en fait, l’analogie est bien choisie ^^)… J’avoue, je suis dans la fantasme, et pire encore, je le partage avec vous…
Coquins codeurs, qui réalisera ce fantasme ?...
Ma problématique :
Hypertrophie de l’appareil… Heu, pardon, restons sérieux.
Chercher un pixel a un caractère hasardeux, sachant que si deux pixels figurent dans la zone de recherche, pixelsearch retourne les coordonnées du premier dans le sens de lecture. L’ennui est qu’il peut retourner une couleur du background alors qu’on cherche un logo ou une icône. C’est d’autant plus vrai lorsque la mise en page change et qu’on doit élargir la zone de recherche, parfois à l’écran entier.
La solution imaginée :
J’ai tenté d’imaginer une architecture qui permette de travailler en une seule étape et qui soit le plus propre possible. L’idée est de comparer une image avec la page active, et indiquer si elle y figure. A l’usage, l’utilisateur qui veut cliquer sur un logo en particulier, fera une capture d’écran, et indiquera le chemin d’accès de cette capture dans les paramètres de la fonction (pas de pb de résolution à prévoir?)
Voici tous les détails de mon fantasme

; #FUNCTION# ;======================================================================================
;
; Name...........: _PixelColorAreaSearch
; Description....: Trouver une grappe de pixels sur un écran en fonction de leur couleur.
; Syntax.........: _PixelColorAreaSearch (left, top, right, bottom ,$sFile ,hwnd)
; Parameters.....: left - Abscisse du coin NW du rectangle.
; top - Ordonnée du coin NW du rectangle.
; right - Abscisse du coin SE du rectangle.
; bottom - Ordonnée du coin SE du rectangle.
; $sFile - Chemin d’accès à l’image recherché.
; hwnd : [optionnel] Handle de la fenêtre à utiliser.
; Return values..: Success - Retourne les coordonnées NW et SE de la zone trouvée.
; - Sets @error to 0
; Failure - Afficher un message d'erreur affichant la raison de l'erreur:
; |1 - Fichier image source non trouvé.
; |2 - Format de fichier source non supporté.
; |3 - image non trouvée dans la zone définie par les paramètres.
; Author.........: Le nom du bienfaiteur de l'humanité et le lien vers le topic pour plus d'infos
;
;=================================================================================================
;Exemple d'utilisation:
Local $aCoord = _PixelColorAreaSearch (0,0,1024,728,"C:\icon.jpg") ; effectue une recherche sur l'intégralité de l'écran
If IsArray($aCoord) = True Then ; << vérifie que _PixelColorAreaSearch a bien trouvé la grappe de couleur définie dans icon.jpg
MsgBox($MB_SYSTEMMODAL, "", "Les coordonnées de votre grappe de pixels débute aux coordonnées" & $aCoord[0] & " et se termine aux coordonnées " & $aCoord[1]) ;Exemple: "Les coordonnées de votre grappe de pixels débute aux coordonnées 150,250,500,600 et se termine aux coordonnées 160,260,510,610" pour une image recherchée de 10*10 pixels. -> idéalement, les variables NW et SE seront réutilisées par la suite pour un mouseclic etc.
elseif @error Then
MsgBox(4096, "Echec de la recherche", "grappe de pixels non trouvée sur sélection donnée", 10)
endif
;
; Name...........: _PixelColorAreaSearch
; Description....: Trouver une grappe de pixels sur un écran en fonction de leur couleur.
; Syntax.........: _PixelColorAreaSearch (left, top, right, bottom ,$sFile ,hwnd)
; Parameters.....: left - Abscisse du coin NW du rectangle.
; top - Ordonnée du coin NW du rectangle.
; right - Abscisse du coin SE du rectangle.
; bottom - Ordonnée du coin SE du rectangle.
; $sFile - Chemin d’accès à l’image recherché.
; hwnd : [optionnel] Handle de la fenêtre à utiliser.
; Return values..: Success - Retourne les coordonnées NW et SE de la zone trouvée.
; - Sets @error to 0
; Failure - Afficher un message d'erreur affichant la raison de l'erreur:
; |1 - Fichier image source non trouvé.
; |2 - Format de fichier source non supporté.
; |3 - image non trouvée dans la zone définie par les paramètres.
; Author.........: Le nom du bienfaiteur de l'humanité et le lien vers le topic pour plus d'infos
;
;=================================================================================================
;Exemple d'utilisation:
Local $aCoord = _PixelColorAreaSearch (0,0,1024,728,"C:\icon.jpg") ; effectue une recherche sur l'intégralité de l'écran
If IsArray($aCoord) = True Then ; << vérifie que _PixelColorAreaSearch a bien trouvé la grappe de couleur définie dans icon.jpg
MsgBox($MB_SYSTEMMODAL, "", "Les coordonnées de votre grappe de pixels débute aux coordonnées" & $aCoord[0] & " et se termine aux coordonnées " & $aCoord[1]) ;Exemple: "Les coordonnées de votre grappe de pixels débute aux coordonnées 150,250,500,600 et se termine aux coordonnées 160,260,510,610" pour une image recherchée de 10*10 pixels. -> idéalement, les variables NW et SE seront réutilisées par la suite pour un mouseclic etc.
elseif @error Then
MsgBox(4096, "Echec de la recherche", "grappe de pixels non trouvée sur sélection donnée", 10)
endif

Au plaisir de réaliser ce rêve avec vous :-p
Avec une fonction aussi utile, à vous la postérité sur les fofo US et les belles américaines ^^
@+ Julien.