AutoitPoradniki

Poradnik Autoit – Imagesearch

Imagesearch jak sama nazwa wskazuje jest poleceniem szukającym odpowiedniego obrazka na ekranie.
Zajmiemy się dziś bardzo prostym UDF’em który prawdopodobnie posłuży nam do pisania botów w grach flash bo właściwie tylko do tego się nadaje…

Aby nie przeciągać – pobieramy UDF #1,#2,#3,#4 (mirrory)

W paczce umieściłem 2 wersje Imagesearch (32/64 Bit) oraz au3 z przykładowym skryptem.

ImageSearch.au3 to tylko dwie funkcje:

  • _ImageSearch szuka na całym ekranie
  • _ImageSearchArea szuka po wybranym obszarze ekranu.

Aby skorzystać z dobrodziejstw tej biblioteki potrzebujemy obrazu w formacie *.png

Składnia polecenia Imagesearch

_ImageSearch([obraz], [pozycja], $x, $y, [tolerancja])

[obraz] – wiadomo, ścieżka do obrazu który zamierzamy szukać.
[Tolerancja] – wartość od 0 do 255, dzięki tej pozycji ustawiamy tolerancję imagesearch na różnicę kolorów pomiędzy obrazkiem, a ekranem. Przydatne w przypadku szukania gif’ów.
[Pozycja] – zwracana pozycja (o ile obrazek został znaleziony) 0 – lewy górny bok obrazka, 1 – środek obrazu.

Składnia _ImageSearchArea jest bardzo zbliżona:

_ImageSearchArea([obraz], [pozycja], $x1, $y1, $x2, $y2, $x, $y, [tolerancja])

Różni się od składni opisanej powyżej jedynie oznaczeniem początku ($x1, $y1) oraz końca ($x2, $y2) wyszukiwanego obszaru. W trakcie pisania skryptów,w których prędkość wyszukiwania jest istotna zalecam korzystanie z _ImageSearchArea aby zawężać obszar wyszukiwania, kiedy tylko się da.

Uwaga !

1) Biblioteka nie porównuje skalowanych obrazów tj. aby skrypt działał na mniejszej/większej rozdzielczości musicie przygotować odpowiednie wielkości obrazów. Mój sposób na obejście tego problemu jest następujący:

Przygotujcie sobie odpowiednie wielkości *png i wrzucicie je do folderów nazwanych jak rozdzielczości ekranu, do których są dostosowane np.

/1024x764/
/720x1280/
/1080x1920/

Wykorzystamy teraz dwa makra (o których będzie następny poradnik) @DesktopHeight zwracające wysokość okna oraz @DesktopWidth zwracający jego szerokość.

_ImageSearch(@DesktopHeight&'x'&@DesktopWidth'\obrazek.png', 0, $x, $y, 0))

W ten sposób imagesearch będzie zawsze szukał w odpowiedniej dla ekranu rozdzielczości.

2) Wersja 64 bitowa nie będzie współgrała z 32 bitowym kompilatorem i vice versa

Jak wspomniałem na samym początku, imagesearch jest dość ograniczonym UDF-em i nie zalecam z niego korzystać dopóki naprawdę nie mamy innego wyjścia.

Zostaw tutaj coś po sobie !

Kliknij na ikonkę aby ocenić ten wpis. W ten sposób motywujesz nas do dalszej pracy. Pozostawienie po sobie komentarza to też dobry pomysł 😉

Średnia ocena 0 / 5. Liczba głosów: 0

Jeszcze nikt nie ocenił ;-(

Możesz również mnie wspomóc w rozwijaniu mojej pasji i tego bloga.

Postaw mi kawę na buycoffee.to

Wpisy, które mogą Ciebie zainteresować:

Instalujemy Playstation Remote Play na każdym telefonie z Androidem

Kabson

Konfiguracja VBA (Emulator GB Advance)

Kabson

Anonimowa Cebulka – czyli kilka informacji o deep web

Kabson

7 porad na start dla użytkowników systemu Windows 10

Kabson

Dwie metody na pobranie Fallout 4 Script Extender

Kabson

Instalujemy Windows 95 na Virtualbox

Kabson

14 komentarzy

Kabson
Kabson 27 lipca 2015 at 20:58

pisz na kabuki.yo[malpa]gmail.com

Odpowiedz
Kabson
Kabson 26 lipca 2015 at 20:39

Mój przykład powyżej z dowolnym obrazkiem nie działa ? oparłem go na hotkey’ach więc żeby zadziałał musisz wdusić p dla standardowego wyszukiwania a a dla area. Jak napisałem w poradniku to przestarzały sposób na obsługę czegokolwiek, nowe poradniki się piszą 😉
Aby wykorzystać 64bitowy skrypt zaraz na początku musisz dodać #AutoIt3Wrapper_UseX64=y
Inaczej dalej w 32bitach działa – trochę to pokręcone (bo wersję wybrać można również podczas kompilacji)
Ew. spróbuj dezaktywować antyvirusa – zazwyczaj skrypty się z nim gryzą.

Odpowiedz
Avatar
TheGuru 27 lipca 2015 at 18:40

możesz do mnie napisać na zwykłą pocztę abym mógł tobie wysłać pliki.
skrypt działa ale nie znajduje obrazków

Odpowiedz
Kabson
Kabson 26 lipca 2015 at 18:31

Zapewnie wrapper nadal jest 32 bitowy (to tylko przypuszczenie) wklejam link z działającym u mnie przykładem zastosowania obu searchów http://pasted.co/aba59586

Odpowiedz
Avatar
TheGuru 26 lipca 2015 at 20:15

odinstalowałem wszystko i ponownie zainstalowałem wersję x64.

script editor jest ten sam. co masz na myśli mówiąc wrapper?
skrypt wykonuje się bez błędu ale nie znajduje obrazka
skompilowałem skrypt ale exe tez nie znajduje obrazka …

Odpowiedz
Kabson
Kabson 26 lipca 2015 at 17:05

Przypomniało mi się – skrypt może dochodzić do traytip’a ale nie zdąży go wyświetlić (bo autoit zamyka skrypt) wrzuć to w jakąś pętlę i dopiero wtedy testuj.

Odpowiedz
Avatar
TheGuru 26 lipca 2015 at 13:26

Dzięki ale …
mam obrazek w png z ,przeźroczystym tłem, (i wersję w bmp) ale _ImageSearchArea zatrzymuje szukanie (albo bardzo długo szuka).

dzielę ekran na kwadraty 40×40 i wyszukuję obrazki 29×29. nawet wpisując ręcznie zakres w którym na pewno jest obrazek skrypt go nie znajduje.

skrypt, bibliotekę i obrazki mam w jednym katalogu ale nawet jak wpiszę nazwę nieistniejącego obrazka to skrypt rusza bez błędu.

co robię źle ?

Odpowiedz
Kabson
Kabson 26 lipca 2015 at 15:15

To, że skrypt odpala bez błędu pomimo braku obrazka to nic dziwnego 😉 Co do wyszukiwania to musiałbym znać kod Twojego skryptu 😉

Odpowiedz
Avatar
TheGuru 26 lipca 2015 at 15:40

dzięki za odpowiedź,

mam taki skrypt, początek prac a i tak nie robi tego co powinien

#include
WinActivate(“Forge of Empires – Google Chrome”)
Sleep(1000)
global $pozx=0, $pozy=0
$search = _ImageSearchArea(“zloto.png”, 0, 855, 88, 956, 147, $pozx, $pozy, 50)
If $search = 1 Then
MouseMove($pozx, $pozy, 10)
traytip(‘Imagesearch’,’Znaleziono. $x=’&$pozx&’ y=’&$pozy,5)
Else
traytip(‘Imagesearch’,’nie znaleziono…’,5)
EndIf

traytip(‘Imagesearch’,’Koniec szukania…’,5)

nie wiem dlaczego zatrzymuje się na szukaniu i nie dochodzi do traytip.

w załączniku screen strony, która ma być przeszukiwana i obrazek, który szukam.
wpisałem trwałe współrzędne by być pewnym, że w zadanym prostokącie jest ten obrazek ale i tak go nie znajduje Smutek

dzieki za pomoc

Odpowiedz
Kabson
Kabson 26 lipca 2015 at 16:22

Po pierwsze, musisz używać odpowiedniej wersji imagesearch pod twoją wersję systemu. Po drugie w autoicie jest taki fajny program który zwie się AU3Info dzięki niemu szybciej namierzysz współrzędne w których musisz wyszukiwać – generalnie zasada działania Imagesearch jest banalna – jeżeli zwykły imagesearch znajduje grafikę, to area ( o ile ma wpisane odpowiednie coordy) również.

Odpowiedz
Avatar
TheGuru 26 lipca 2015 at 16:50

mam W7 64bit i taką bibliotekę wgrałem do katalogu ze skryptem.

dlaczego skrypt

$search = _ImageSearch(‘zloto.png’, 0, $pozx, $pozy, 50)
traytip(‘Imagesearch’,’Szukam…’,5)

nie dochodzi do linii z traytip … ?

Avatar
TheGuru 26 lipca 2015 at 17:37

dałem na końcu MsgBox(0,”Forge of Empires”,”koniec” ,10) też się nie wyświetla…
dałem w pętli i dodałem MouseMove tez bez efektu.

wygląda jakby skrypt wisiał bo powinien znaleźć fragment który wyciąłem z obrazka który przeszukuję

Avatar
TheGuru 26 lipca 2015 at 17:51

w pliku mam taki błąd

“C:\Users\….\FOE\ImageSearch.au3” (44) : ==> Subscript used on non-accessible variable.:
If $result[0] = “0” Then Return 0
If $result^ ERROR

o jaka zmienną chodzi czy
$search = _ImageSearchArea(“zloto.png”, 0, 100, 100, 1100, 700, $pozx, $pozy, 50)

zrobiłem zmienną globalną ale nie pomogło [ Global $search ]

Avatar
TheGuru 26 lipca 2015 at 21:00

sorry, że zawracam gitare ale się wkułem 🙂

skopiowałem twój przykład w całości i po naciśnięciu ‘p’ i ‘a’

wyskakuje mi błąd :

ImageSearch.au3″ (44) : ==> Subscript used on non-accessible variable.:
If $result[0] = “0” Then Return 0
If $result^ ERROR

instalowałem autoit-v3-setup.exe
do edycji używam SciTE w wersji v3.3.14.0

wyłączyłem antyvira i nic 🙁

Zostaw komentarz


Obserwuj nasz blog !
Podaj swój adres email, by być informowanym na bieżąco o nowych artykułach pojawiających się na naszej witrynie.