Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Szukanie obrazu


Rekomendowane odpowiedzi

Opublikowano

Witam ;) Pomoglibyście zrobić skrypt który szuka obrazka nr1 i jak znajdzie to klika obrazek nr2 ? Bo coś mi nie wychodzi :/ nie chce mi sie wgl skrypt uruchomić 

post-1118589-0-02757800-1469523827_thumb.png

Opublikowano

@LEM0N3K

 

Skrypt Tobie się uruchamia, ale że nie ma on nic do roboty to się wyłącza ;)

Dodaj sobie taki kawałek kodu:

While 1
Sleep (100) ; aby procesor mógł też odpocząć
WEnd

Spowoduje to, że aplikacja nie będzie się wyłączać, ponieważ ciągle będzie coś wykonywać

 

Dalej, chcesz aby po odnalezieniu obrazka 1 kliknął na obrazek 2.

Z Twojego obecnego kodu zajmiemy się warunkiem IF

if $img1 = 1 Then
MouseClick ("left", $x, $y, 2)
EndIf

Czytając go wnioskujemy:

Jeżeli zmienna $img1 wynosi 1 (1 wynosi dla znalezienia pasującego obrazka do wyszukiwanego dla funkcji _ImageSearch) to

Klika lewym przyciskiem myszy na pozycję $x i $y 

MouseClick ("left", $x, $y, 2) 

Koniec

 

Czyli zakładając, że chcemy aby czynność wykonała się zaraz po odnalezieniu obrazka img1.bmp to musimy naszą funkcję dodać zaraz po tym warunku.

Funkcją jaką można znaleźć położenie obrazka jest użyty w tym kodzie _ImageSearch. Wystarczy dodać kolejną linijkę aby Twoja aplikacja wyszukała obrazek i do funkcji MouseClick dodać odpowiednie położenie obrazka.

 

 

Co do tego, że niekiedy aplikacja się nie włącza (nie że uruchamia się poprawnie i zaraz zamyka jak tutaj): Debuger mówi wszystko co jest źle. Wystarczy się z nim zaprzyjaźnić :D

 

Edit: O pomoc zazwyczaj prosi się w dziale głównym AutoIT ;) Następnym razem tam napisz temat jeżeli prosisz o pomoc

Tysiące lat wojen, ani jednego dnia pokoju,

pytam czy to skończy się.

 

Zegarek BB

Opublikowano

Bo nawet nie zrobiles tego co napisal kolega Daniel.

 

#include <ImageSearch.au3>
 
HotkeySet("{F1}", "start")
 
Global $x = 0, $y = 0
 
while 1
sleep(100)
wend
 
func start()
$img1 = _ImageSearch("img1.bmp", 1, $x, $y, 10)
If $img1 = 1 Then
MouseMove($x, $y)
EndIf
endfunc

 

 

Opublikowano

Tak wiem przepraszam, pogubiłem się, zrobiłem tak jak mówiliście ale po uruchomieniu funkcji wyskakuje takie coś, chyba jest coś nie tak z obrazkiem :/ ale nie rozumiem czemu bo zapisany jest w folderze ze skryptem i jest w bmp :/

post-1118589-0-39108600-1469556737_thumb.png

Opublikowano

@LEM0N3K

Hmm, masz jakiś problem z biblioteką. Kod jest ok.

Spróbuj zamienić kod biblioteki ImageSearch.au3 na taki. Z tego co wyczytałem znajduje się on u Ciebie w "C:\Program Files (x86)\AutoIt3\Include\"

#include-once
; ------------------------------------------------------------------------------
;
; AutoIt Version: 3.0
; Language:       English
; Description:    Functions that assist with Image Search
;                 Require that the ImageSearchDLL.dll be loadable
;
; ------------------------------------------------------------------------------

;===============================================================================
;
; Description:      Find the position of an image on the desktop
; Syntax:           _ImageSearchArea, _ImageSearch
; Parameter(s):
;                   $findImage - the image to locate on the desktop
;                   $tolerance - 0 for no tolerance (0-255). Needed when colors of
;                                image differ from desktop. e.g GIF
;                   $resultPosition - Set where the returned x,y location of the image is.
;                                     1 for centre of image, 0 for top left of image
;                   $x $y - Return the x and y location of the image
;
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0
;
; Note: Use _ImageSearch to search the entire desktop, _ImageSearchArea to specify
;       a desktop region to search
;
;===============================================================================
Func _ImageSearch($findImage,$resultPosition, ByRef $x, ByRef $y,$tolerance)
   return _ImageSearchArea($findImage,$resultPosition,0,0,@DesktopWidth,@DesktopHeight,$x,$y,$tolerance)
EndFunc

Func _ImageSearchArea($findImage,$resultPosition,$x1,$y1,$right,$bottom, ByRef $x, ByRef $y, $tolerance)
	;MsgBox(0,"asd","" & $x1 & " " & $y1 & " " & $right & " " & $bottom)
	if $tolerance>0 then $findImage = "*" & $tolerance & " " & $findImage
	$result = DllCall("ImageSearchDLL.dll","str","ImageSearch","int",$x1,"int",$y1,"int",$right,"int",$bottom,"str",$findImage)

	; If error exit
    if $result[0]="0" then return 0

	; Otherwise get the x,y location of the match and the size of the image to
	; compute the centre of search
	$array = StringSplit($result[0],"|")

   $x=Int(Number($array[2]))
   $y=Int(Number($array[3]))
   if $resultPosition=1 then
      $x=$x + Int(Number($array[4])/2)
      $y=$y + Int(Number($array[5])/2)
   endif
   return 1
EndFunc

;===============================================================================
;
; Description:      Wait for a specified number of seconds for an image to appear
;
; Syntax:           _WaitForImageSearch, _WaitForImagesSearch
; Parameter(s):
;					$waitSecs  - seconds to try and find the image
;                   $findImage - the image to locate on the desktop
;                   $tolerance - 0 for no tolerance (0-255). Needed when colors of
;                                image differ from desktop. e.g GIF
;                   $resultPosition - Set where the returned x,y location of the image is.
;                                     1 for centre of image, 0 for top left of image
;                   $x $y - Return the x and y location of the image
;
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0
;
;
;===============================================================================
Func _WaitForImageSearch($findImage,$waitSecs,$resultPosition, ByRef $x, ByRef $y,$tolerance)
	$waitSecs = $waitSecs * 1000
	$startTime=TimerInit()
	While TimerDiff($startTime) < $waitSecs
		sleep(100)
		$result=_ImageSearch($findImage,$resultPosition,$x, $y,$tolerance)
		if $result > 0 Then
			return 1
		EndIf
	WEnd
	return 0
EndFunc

;===============================================================================
;
; Description:      Wait for a specified number of seconds for any of a set of
;                   images to appear
;
; Syntax:           _WaitForImagesSearch
; Parameter(s):
;					$waitSecs  - seconds to try and find the image
;                   $findImage - the ARRAY of images to locate on the desktop
;                              - ARRAY[0] is set to the number of images to loop through
;								 ARRAY[1] is the first image
;                   $tolerance - 0 for no tolerance (0-255). Needed when colors of
;                                image differ from desktop. e.g GIF
;                   $resultPosition - Set where the returned x,y location of the image is.
;                                     1 for centre of image, 0 for top left of image
;                   $x $y - Return the x and y location of the image
;
; Return Value(s):  On Success - Returns the index of the successful find
;                   On Failure - Returns 0
;
;
;===============================================================================
Func _WaitForImagesSearch($findImage,$waitSecs,$resultPosition, ByRef $x, ByRef $y,$tolerance)
	$waitSecs = $waitSecs * 1000
	$startTime=TimerInit()
	While TimerDiff($startTime) < $waitSecs
		for $i = 1 to $findImage[0]
		    sleep(100)
		    $result=_ImageSearch($findImage[$i],$resultPosition,$x, $y,$tolerance)
		    if $result > 0 Then
			    return $i
		    EndIf
		Next
	WEnd
	return 0
EndFunc


Potem spróbuj uruchomić aplikację ponownie.

Jeżeli to nie zadziała to najprawdopodobniej Twój system nie obsługuje tej biblioteki i musisz skorzystać z wersji AHK zrobionej przez Hans Klossa. Link do tematu

http://www.mpcforum.pl/topic/1455631-ahk-imagesearch-for-autoit/#entry12338084

Tysiące lat wojen, ani jednego dnia pokoju,

pytam czy to skończy się.

 

Zegarek BB

Opublikowano

Tak przy okazji , skrypt będzie działał dokładnie tylko jeden raz po naciśnięciu startu.

 

Trzeba funkcję wpisać w pętlę i dołożyć start/stop funkcji, czyli to co było na początku było prawie dobre , bez funkcji stopu tylko

 

Reszta błędu  to nie zły udf tylko  bibliotek, powinny być odpowiednie dla systemu x32 albo x64  

Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz.

Opublikowano

Mam takie coś i działa klika tylko jak to zrobić teraz by znajdowało obrazek nr1 a potem znajdowało obrazk nr2 i klikało na obrazek nr2

#include <ImageSearch2015.au3>

HotkeySet("{F1}", "start")
HotKeySet("{Esc}", "end")

_ImageSearchStartup()

Func end()
   Exit
EndFunc

While 1
   Sleep(100)
WEnd

Func start()
   Local $x1 = 0, $y1 = 0
   Local $imgdir = @ScriptDir & "\img1.png"
   if FileExists($imgdir) Then
	  Local $Obrazek = _ImageSearch($imgdir2, 1, $x1, $y1, 0, 0)
	  If $Obrazek == 1 Then
		 MouseClick("left", $x1, $y1)
	  EndIf
   EndIf
EndFunc
 

Próbowałem wstawić kolejną linijkę po If $Obrazek = 1 Then tak jak mówił Daniel ale nie chodziło coś :/ Raczej coś źle zrobiłem


Tak przy okazji , skrypt będzie działał dokładnie tylko jeden raz po naciśnięciu startu.

 

Trzeba funkcję wpisać w pętlę i dołożyć start/stop funkcji, czyli to co było na początku było prawie dobre , bez funkcji stopu tylko

 

Reszta błędu  to nie zły udf tylko  bibliotek, powinny być odpowiednie dla systemu x32 albo x64  

Tak wiem ;) ale zrobienie pętli nie jest trudne, chcę po prostu by robiło to co ma robić :D

Opublikowano


#include <ImageSearch2015.au3>

 

HotkeySet("{F1}", "start")

HotKeySet("{Esc}", "end")

 

_ImageSearchStartup()

 

While 1

Sleep(100)

WEnd

 

Func start()

Local $x1 = 0, $y1 = 0

Local $imgdir = @ScriptDir & "\img1.png"

Local $imgdir2 = @ScriptDir & "\img2.png"

if FileExists($imgdir) And FileExists($imgdir2) Then

Local $Obrazek = _ImageSearch($imgdir, 1, $x1, $y1, 0, 0)

If $Obrazek == 1 Then

MouseClick("left", $x1, $y1)

$Obrazek = _ImageSearch($imgdir2, 1, $x1, $y1, 0, 0)

If $Obrazek == 1 Then

MouseClick("left", $x1, $y1)

EndIf

EndIf

EndIf

EndFunc

 

Func end()

Exit

EndFunc

 

 

Opublikowano
#include <ImageSearch2015.au3>

HotkeySet("{F1}", "start")
HotKeySet("{Esc}", "end")

_ImageSearchStartup()

While 1
Sleep(100)
WEnd

Func start()
Local $x1 = 0, $y1 = 0
Local $imgdir = @ScriptDir & "\img1.png"
Local $imgdir2 = @ScriptDir & "\img2.png"
if FileExists($imgdir) And FileExists($imgdir2) Then
Local $Obrazek = _ImageSearch($imgdir, 1, $x1, $y1, 0, 0)
If $Obrazek == 1 Then
MouseClick("left", $x1, $y1)
$Obrazek = _ImageSearch($imgdir2, 1, $x1, $y1, 0, 0)
If $Obrazek == 1 Then
MouseClick("left", $x1, $y1)
EndIf
EndIf
EndIf
EndFunc

Func end()
Exit
EndFunc

Nie o to mi chodziło :/ chodziło mi o to by klikało na obrazek nr2 tylko wtedy gdy znajdzie obrazek nr1. Nie chce by klikał na obraz nr 1

Opublikowano

To w czym problem usunac jedna linijke?

#include <ImageSearch2015.au3>

HotkeySet("{F1}", "start")
HotKeySet("{Esc}", "end")

_ImageSearchStartup()

While 1
   Sleep(100)
WEnd

Func start()
   Local $x1 = 0, $y1 = 0
   Local $imgdir = @ScriptDir & "\img1"
   Local $imgdir2 = @ScriptDir & "\img2.png"
   if FileExists($imgdir) And FileExists($imgdir2) Then
	  Local $Obrazek = _ImageSearch($imgdir, 1, $x1, $y1, 0, 0)
	  If $Obrazek == 1 Then
		$Obrazek = _ImageSearch($imgdir2, 1, $x1, $y1, 0, 0)
		If $Obrazek == 1 Then
			MouseClick("left", $x1, $y1)
		EndIf
	  EndIf
   EndIf
EndFunc

Func end()
   Exit
EndFunc

 

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...