Page 1 of 1

程式如何撰寫卡關

Posted: 01 Apr 2023, 09:36
by wiki3345678
目前遇到偵測圖片時,可能會跳出重複的,位置會固定,由上而下顯示,可能會有3~5個(a.b.c.d.e圖),請問要如何分別進行點擊,從下而上呢?

Re: 程式如何撰寫卡關

Posted: 01 Apr 2023, 13:21
by WKen
比如
image.png
image.png (9.2 KiB) Viewed 1200 times

Code: Select all

^s::
{
	CoordMode "Pixel"
	if ImageSearch(&FoundX, &FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, ".\1.png") {
	   msgbox "X" FoundX " Y" FoundY
	   if ImageSearch(&FoundX2, &FoundY2, 0, FoundY+10, A_ScreenWidth, A_ScreenHeight, ".\1.png")
	      msgbox "X" FoundX2 " Y" FoundY2
	}
}
請問要如何分別進行點擊,從下而上呢?
if FoundX2 || FoundY2
else if FoundX || FoundY

Re: 程式如何撰寫卡關

Posted: 01 Apr 2023, 17:32
by wiki3345678
謝謝,所以是有找到才會點擊,沒找到就不會點擊,是吧!不好意思,我邏輯不太好……

Re: 程式如何撰寫卡關

Posted: 02 Apr 2023, 02:44
by WKen
是的

Code: Select all

#Requires AutoHotkey v2.0.2

F1::
{
FoundX:="",FoundX2:="",FoundX3:="",FoundX4:="",FoundX5:=""
FoundY:="",FoundY2:="",FoundY3:="",FoundY4:="",FoundY5:=""

	CoordMode "Pixel", "Screen"
	if ImageSearch(&FoundX, &FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, ".\1.png") {
	   if ImageSearch(&FoundX2, &FoundY2, 0, FoundY+10, A_ScreenWidth, A_ScreenHeight, ".\1.png")
	      if ImageSearch(&FoundX3, &FoundY3, 0, FoundY2+10, A_ScreenWidth, A_ScreenHeight, ".\1.png")
		     if ImageSearch(&FoundX4, &FoundY4, 0, FoundY3+10, A_ScreenWidth, A_ScreenHeight, ".\1.png")
			    ImageSearch(&FoundX5, &FoundY5, 0, FoundY4+10, A_ScreenWidth, A_ScreenHeight, ".\1.png")
	}

    CoordMode "Mouse", "Screen"

	if FoundX5 || FoundY5 {
	   click FoundX5, FoundY5, 0
	   sleep 1000
	   }
    if FoundX4 || FoundY4 {
	   click FoundX4, FoundY4, 0
	   sleep 1000
	   }
    if FoundX3 || FoundY3 {
	   click FoundX3, FoundY3, 0
	   sleep 1000
	   }
    if FoundX2 || FoundY2 {
	   click FoundX2, FoundY2, 0
	   sleep 1000
	   }
    if FoundX || FoundY
	   click FoundX, FoundY, 0
}

Re: 程式如何撰寫卡關

Posted: 02 Apr 2023, 09:04
by wiki3345678
1.Y2.Y3.Y4.Y5,後面的0是什麼意思呢?
2.請問+10是從圖的中心到下一張圖的中心位置嗎?
我這邊的文件都是只有Y座標不同,X座標相同,只要更改後面+10的數值嗎

Re: 程式如何撰寫卡關

Posted: 02 Apr 2023, 10:04
by WKen
1.

Code: Select all

ImageSearch &OutputVarX, &OutputVarY, X1, Y1, X2, Y2, ImageFile
https://www.autohotkey.com/docs/v2/lib/ImageSearch.htm
image.png
image.png (14.25 KiB) Viewed 1113 times
2.是從圖的左上角到下一張圖的中心位置,只需更改Y坐標

Re: 程式如何撰寫卡關

Posted: 02 Apr 2023, 20:20
by wiki3345678
程式寫完後,設定X1~X5,Y1~Y5,若視窗跳出只有3.4個會停下不動作,可是跳出五個又會繼續動作
請問該怎麼修改呢?? 若X5.Y5沒偵測到就不點擊動作

Re: 程式如何撰寫卡關

Posted: 04 Apr 2023, 00:55
by WKen

Code: Select all

if !FoundX5 && !FoundY5
   return

Code: Select all

#Requires AutoHotkey v2.0.2

F1::
{
FoundX:="",FoundX2:="",FoundX3:="",FoundX4:="",FoundX5:=""
FoundY:="",FoundY2:="",FoundY3:="",FoundY4:="",FoundY5:=""

	CoordMode "Pixel", "Screen"
	if ImageSearch(&FoundX, &FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, ".\1.png") {
	   if ImageSearch(&FoundX2, &FoundY2, 0, FoundY+10, A_ScreenWidth, A_ScreenHeight, ".\1.png")
	      if ImageSearch(&FoundX3, &FoundY3, 0, FoundY2+10, A_ScreenWidth, A_ScreenHeight, ".\1.png")
		     if ImageSearch(&FoundX4, &FoundY4, 0, FoundY3+10, A_ScreenWidth, A_ScreenHeight, ".\1.png")
			    ImageSearch(&FoundX5, &FoundY5, 0, FoundY4+10, A_ScreenWidth, A_ScreenHeight, ".\1.png")
	}

    CoordMode "Mouse", "Screen"

	if FoundX5 || FoundY5 {
	   click FoundX5, FoundY5, 0
	   sleep 1000
	   }
    else
       return
    if FoundX4 || FoundY4 {
	   click FoundX4, FoundY4, 0
	   sleep 1000
	   }
    if FoundX3 || FoundY3 {
	   click FoundX3, FoundY3, 0
	   sleep 1000
	   }
    if FoundX2 || FoundY2 {
	   click FoundX2, FoundY2, 0
	   sleep 1000
	   }
    if FoundX || FoundY
	   click FoundX, FoundY, 0
}

Re: 程式如何撰寫卡關

Posted: 04 Apr 2023, 15:50
by wiki3345678
請問V2的程式,可以用在V1嗎?
目前使用的是V1的版本

Re: 程式如何撰寫卡關

Posted: 05 Apr 2023, 02:57
by WKen
不可以,但可以安裝兩個版本,建議使用v2

Re: 程式如何撰寫卡關

Posted: 05 Apr 2023, 06:16
by wiki3345678
那如果是V1,你上一個回的程式,要怎麼修改呢?
V2還沒有用過,抱歉

Re: 程式如何撰寫卡關

Posted: 05 Apr 2023, 07:11
by WKen
不知道,我也是初學者 8-) ,v2感覺更容易學,沒理由學習v1 :think: