#Include Gdip.ahk
global bmpneedle
global bmphaystack
global RET
global Gdip_SaveBitmapToFile
global gdipToken := Gdip_Startup()
global Image
global ImageSaved
global speed
global mdefault
global safe
global Time_Setting
global 모드
Gdip_서치클릭(Image2)
{
WinGet, Title , ID, BlueStacks App Player
Image = %a_scriptdir%\image\%image2%.bmp
Gdip_ImageSearchWithHwnd(Title,Image, X, Y)
Guicontrol,,로그, ▶▶%Image2%.bmp◀◀ = X좌표 : %X% Y좌표 : %Y%||
Click(x,y)
}
Gdip_서치ESC(Image2)
{
WinGet, Title , ID, BlueStacks App Player
Image = %a_scriptdir%\image\%image2%.bmp
Gdip_ImageSearchWithHwnd(Title,Image, X, Y)
Guicontrol,,로그, ▶▶%Image2%.bmp◀◀ = X좌표 : %X% Y좌표 : %Y%||
Postmessage, 0x100, 0x1B, 0x10001, , BlueStacks App Player
Postmessage, 0x101, 0x1B, 0xC0010001, , BlueStacks App Player
Sleep, %Time_Setting%
}
속도조절함수()
{
if Speed = 1
{
Time_Setting := 200
모드 := 고속
}
else if mDefault = 1
{
Time_Setting := 500
모드 := 표준
}
else Safe = 1
{
Time_Setting := 1000
모드 := 안전
}
}
return
Gdip_ImageSearchWithHwnd(Hwnd,Image,Byref X,Byref Y,Variation=0, sX = 0, sY = 0, eX = 0, eY = 0, Trans="")
{
WinGet, ActiveID, ID, BlueStacks App Player
Gui,submit,nohide
formattime , nowtime,,yyyy-MM-dd HH:mm:ss
Guicontrol,,로그, %nowtime% 이미지 저장 및 비교서치 시작||
Sleep, %Time_Setting%
gdipToken := Gdip_Startup()
bmpHaystack := Gdip_BitmapFromHwnd(Hwnd)
;-------------------------------------
;비활성 캡춰가 제대로 되는지 확인하기 위해 이미지파일로 저장하는 테스트 구문
static imageSaved
if !imageSaved and imageSaved := true
Gdip_SaveBitmapToFile(bmpHaystack, "테스트.bmp")
Guicontrol,,로그, ▶이미지 저장값 = %bmpHaystack%◀||
;-------------------------------------
bmpNeedle := Gdip_CreateBitmapFromFile(Image)
Guicontrol,,로그, ▶이미지 비교값 = %bmpNeedle%◀||
Sleep, %Time_Setting%
RET := Gdip_ImageSearch(bmpHaystack,bmpNeedle,LIST,sX,sY,eX,eY,Variation,Trans,1,1)
Guicontrol,,로그, ▶ RET값 = %RET% (1이면 찾음 0이면 없음)◀||
colorID := Gdip_GetPixel(bmpHaystack, 101,111)
colors := DEC2HEX(colorID)
Gdip_DisposeImage(bmpHaystack)
Gdip_DisposeImage(bmpNeedle)
Gdip_Shutdown(gdipToken)
StringSplit, LISTArray, LIST, `,
X := LISTArray1
Y := LISTArray2
}
DEC2HEX(DEC, RARGB="false")
{
SetFormat, IntegerFast, hex
HEX += DEC ;Converts the decimal to hexidecimal
return HEX
}
F2::
Gui,submit,nohide
formattime , nowtime,,yyyy-MM-dd HH:mm:ss
속도조절함수()
loop
{
ifWinnotExist, BlueStacks App Player
{
run, "C:\Program Files (x86)\BlueStacks\HD-StartLauncher.exe"
Guicontrol,,로그, ※블루스택튕김, 재실행※||
Winwait, BlueStacks App Player
WinMove, 30, 30
WinSet, AlwaysOnTop, On, BlueStacks App Player
}
Gdip_서치클릭("디소체")
Sleep, %Time_Setting%
Guicontrol,,로그, ▶%모드%모드_대기시간 : %Time_Setting% ◀||
Gdip_서치클릭("공지x")
Sleep, %Time_Setting%
Guicontrol,,로그, ▶%모드%모드_대기시간 : %Time_Setting% ◀||
Gdip_서치ESC("공지x2")
Sleep, %Time_Setting%
Guicontrol,,로그, ▶%모드%모드_대기시간 : %Time_Setting% ◀||
}
}
return
Click(x, y)
{
Coor := x | y<<16
WinGet, ActiveID, ID, BlueStacks App Player
Loop
{
PostMessage, 0x201, 0, %Coor%,, ahk_id %ActiveID%
PostMessage, 0x202, 0, %Coor%,, ahk_id %ActiveID%
Guicontrol,,로그, ♥ 클릭완료 = X좌표 : %X% Y좌표 : %Y% ♥ ||
break
}
sleep, 100
}
-------------------------------------------
와이로님과 슉슉이님 덧글보고 도움을 얻어 만들어봤는데요....
F2 번을 누르면
처음 서치는 bmpHaystack 숫자나오고, bmpneedle 숫자나오고, RED는 1 나오면서 잘작동하는것같은데
두번째서치 부터는 bmpHaystack, bmpneedle 둘다 0x숫자 이런식으로 나와요 (공지x.bmp 랑 공지x2.bmp 부분...)
왜 이런지 모르겠습니다 ㅜㅜ
그리고 Gdip을 활용한 이미지서치는 루프를 할 필요가없나요?? 제가 이해가 잘안되서
지금 블루스택 화면 이랑 컴퓨터에 저장된 image 파일이랑 비교하는거면.... 루프가없어도 될까해서... 아닌가;
으으 하루종일 생각하다보니 머리가 복잡해져서 지금 아무것도 생각이 안나네요 ㅜㅜ
로그창은 이래요▼
SetFormat, integer, hex
a := 1
MsgBox % a
;아래처럼 데시멀 포맷으로 바꿔주면 제대로 나올겁니다.
SetFormat, integer, d
b := 1
MsgBox % b
;설정되 있는 정수형 출력포맷은 A_FormatInteger 로 확인 가능합니다.
MsgBox % A_FormatInteger
와이로님 답변 입니다.