여기저기 검색해서 이런 스크립트를 만들었는데
#include Gdip.ahk
SetTitleMatchMode 2
ImageSearch_Inactive(Title, ImgFileName)
{
If !pToken := Gdip_Startup()
{
MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
ExitApp
}
OnExit, Exit
pBitmapHayStack := Gdip_BitmapFromHWND(hwnd := WinExist(Title))
pBitmapNeedle := Gdip_CreateBitmapFromFile(ImgFileName)
Width1 := Gdip_GetImageWidth(pBitmapHayStack), Height1 := Gdip_GetImageHeight(pBitmapHayStack)
Width2 := Gdip_GetImageWidth(pBitmapNeedle), Height2 := Gdip_GetImageHeight(pBitmapNeedle)
E1 := Gdip_LockBits(pBitmapHayStack, 0, 0, Width1, Height1, Stride1, Scan01,BitmapData1)
E2 := Gdip_LockBits(pBitmapNeedle, 0, 0, Width2, Height2, Stride2, Scan02,BitmapData2)
MCode(Gdip_ImageSearch, "83EC148B4424309983E20303C28BC88B442434995383E2035503C2C1F80256C1F902837C24"
. "30005789442420C7442410000000000F8EBE0000008B5C24288B7C24388D048D00000000894424188B442430895C241CE"
. "B098DA424000000008BFFC74424440000000085C07E6D895C24148B6C242CC7442440000000008D6424008B4C24403B4C"
. "243C0F8D8600000033C985FF7E158BD58BF38B063B02751F4183C20483C6043BCF7CEF8B442420035C2418FF44244003C"
. "003C003E8EBC38B4C24448B5C24148B4424304183C3043BC8894C2444895C24147C978B4C24108B5C241C035C2418413B"
. "4C2434894C2410895C241C0F8C68FFFFFF8B5424488B44244C5F5E5DC702FFFFFFFFC700FFFFFFFF5B83C414C38B4C244"
. "48B5424488B44244C5F495E890A8B4C24085D89085B83C414C3")
Time1 := A_TickCount
VarSetCapacity(x, 8, 0), VarSetCapacity(y, 8, 0)
Loop, 100
DllCall(&Gdip_ImageSearch, "uint", Scan01, "uint", Scan02, "int", Width1, "int", Height1, "int", Width2, "int", Height2, "int", Stride1, "int", Stride2, "int*", x, "int*", y)
;MsgBox, % "Time for 100 searches: " A_TickCount-Time1 "ms`nx: " x "`ny: " y ;%
Gdip_UnlockBits(pBitmapHayStack,BitmapData1), Gdip_UnlockBits(pBitmapNeedle,BitmapData2)
Gdip_DisposeImage(pBitmapHayStack), Gdip_DisposeImage(pBitmapNeedle)
return [x, y, Width2, Height2]
}
MCode(ByRef code, hex)
{
VarSetCapacity(code, StrLen(hex)//2)
Loop % StrLen(hex)//2 ;%
NumPut("0x" SubStr(hex, 2*A_Index-1, 2), code, A_Index-1, "char")
}
F5::
WinGetClass, class, A
MsgBox, The active window's class is "%class%".
return
F9::
searchpos := ImageSearch_Inactive("BlueStacks","test.png")
if searchpos[1]>0 and searchpos[2]>0
x := searchpos[1] + Ceil(searchpos[3]/2) ;클릭 지점을 이미지 좌/상 에서 이미지 중간으로 보정, 중간값이 정수로 떨어지게 하기 위해 올림(ceil)사용
y := searchpos[2] + Ceil(searchpos[4]/2)
;MsgBox, % "Time for 100 searches: " A_TickCount-Time1 "ms`nx: " x "`ny: " y ;%
;ControlClick , BlueStacksApp1, BlueStacks, _ctl.Window, L, 1, x%x% y%y% NA
;ControlClick, x%x% y%y%,BlueStacks,,,,
x := % "" x ""
y := % "" y ""
Pos := x|y<<16
postmessage,0x201,1,%Pos%,,BlueStacks ;title 프로그램의 pos지점을 왼클릭으로 누른다
postmessage,0x202,0,%Pos%,,BlueStacks ;왼클릭을 뗀다.
return
Exit:
Gdip_Shutdown(pToken)
ExitApp
return
f9를 누르면 블루스택에서 구동중인 앱에서 test.png 에 해당하는 그림을 비활성 상태에서 찾아서 클릭까지 하는 스크립트 입니다.
일단 비활성 상태에서 이미지 서치까지는 잘 되는데 비활성 클릭을 하려고 하니 안되는군요.
controlclick으로도 해보고 postmessage로도 해봤는데 둘 다 똑같은 증상이 나타나면서 비활성 클릭이 안됩니다.
일단 두 명령어 모두 클릭이 완전히 안되는 것은 아니고 '활성 상태에서 블루스택 윈도우 안에 마우스가 머물고 있을 때' f9를 누르면 해당 이미지 클릭이 되긴 합니다
하지만 블루스택 윈도우가 비활성 상태이거나 마우스가 블루스택 윈도우를 벗어나 있으면 클릭이 안되는군요.
비활성 상태에서 클릭이 가능하게 하는 방법이 없을까요?
'오토핫키' 카테고리의 다른 글
같은 줄의 이미지 두개 인식하려면 어찌하나요 (0) | 2017.06.03 |
---|---|
녹스는 되는데 블루스택 픽셀서치가 인식을못해요 (0) | 2017.06.01 |
GUI를 이용하여 LOG박스를 제작하고 싶어요 (0) | 2017.05.29 |
메M은 오핫으로만들어야한다던데 (0) | 2017.05.26 |
이미지서치 성능개선할 수 없나요 (0) | 2017.05.24 |
간단한 질문입니다 구이버튼관련 (0) | 2017.05.18 |
안녕하세요 gdip비활성이미지 서치후 PostMessage 관련 질문드립니다 (0) | 2017.05.15 |
매크로로 돈벌만한게임있나요? (3) | 2017.05.14 |
녹스에서 매크로 실행하려면 설정 따로 해야 하는 게 있나요? (0) | 2017.05.13 |
오토핫키 이미지서치가안되는데어떻게해야할까요? (0) | 2017.05.13 |