매크로

이것저것 소스조금씩 보면서 많이 배우고 있는 초보입니다. 전에 알수없는 이유로인해 Gdip이미지서치가 안되어

비활성 이미지서치를 손놓고 비활성 입력으로만 매크로를 만들어서 사용했는데...어제부로 오토핫키32비트로

설치하니 정상적으로 이미지 서치가 되더군요(기존64비트설치)

전에 셋쇼마루님이 주신 소스를 이용해서 서치해봤는데 정확히 좌표까지 넘어와 이미지가 서치되는 것을 확인 했습니다.

뭐가 뭔지 모르고 그냥 따라하다 보니 응용이 안되네요 콘소스통으로 올려놓은거 봐도 소스가 길어서 초보가 보기엔 좀 이해가 힘들었습니다. 고수님들은 하찮은것일 수도 있지만 주석좀 적어서 주시면 감사할게요

필요한거는 지역이미지서치, trans가능한 함수 이 두가지 입니다. 블루스택1을 사용중입니다.

좋은 예제가 있으면 좋을 것 같습니다. 감사합니다.

 

#Singleinstance Force
#Include Gdip.ahk
SetBatchLines, -1
SetWorkingDir, %A_WorkingDir%

ImageSearch_uka(Title, ImgFileName, ByRef Pos_X, ByRef Pos_Y, DebugMode=false)
{
 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)
 Pos_X := X, Pos_Y := Y
 if (DebugMode = true)
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
}

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")
}

;;;;;;;;;;Gdip 이미지서치 함수▲

Click(x, y)
{
Ukano := x | y<<16
WinGet, ActiveID, ID, BlueStacks App Player
PostMessage, 0x201, 0, %Ukano%,, ahk_id %ActiveID%
PostMessage, 0x202, 0, %Ukano%,, ahk_id %ActiveID%
}

;;;;;;;;;; 비활성클릭 함수 ▲

F1::

ImageSearch_uka("BlueStacks App Player","1.png", x, y)
MsgBox %x%/%y%
Click(x,y)
return

 

 

 


  • 크루세이덩 2016.07.31 12:25

    블루스택1이시면 아래 함수가 간단하고 좋습니다.


    winget,title,ID,BlueStacks App Player

    if (gdip_imagesearchwithhwnd(title,a.png,x,y,trans="색상코드"))


    Gdip_ImageSearchWithHwnd(Hwnd,Image,Byref X,Byref Y,Variation=0, sX = 0, sY = 0, eX = 0, eY = 0, Trans="")

    {

    gdipToken := Gdip_Startup()

    bmpHaystack := Gdip_BitmapFromHwnd(Hwnd)

    bmpNeedle := Gdip_CreateBitmapFromFile(Image)

    RET := Gdip_ImageSearch(bmpHaystack,bmpNeedle,LIST,sX,sY,eX,eY,Variation,Trans,1,1)

    Gdip_DisposeImage(bmpHaystack)

    Gdip_DisposeImage(bmpNeedle)

    Gdip_Shutdown(gdipToken)

    StringSplit, LISTArray, LIST, `,

    X := LISTArray1

    Y := LISTArray2

    return RET

    }

  • 가족오락관 2016.07.31 16:05

    >"C:\Program Files\AutoHotkey\AutoHotkeyA32.exe" /ErrorStdOut "C:\Users\Administrator\Desktop\gdip연습\test2.ahk"   
    C:\Users\Administrator\Desktop\gdip연습\test2.ahk (19) : ==> Call to nonexistent function.
         Specifically: Gdip_ImageSearch(bmpHaystack,bmpNeedle,LIST,sX,sY,eX,eY,Variation,Trans,1,1)
    >Exit code: 2    Time: 0.1434

    라고 에러가 뜨는건...gdip.ahk파일에 문제가 있는건가요?

  • 크루세이덩 2016.07.31 19:17
    gdip_imagesearch.ahk 파일도 인크루드 시키셔야 합니다.
  • 가족오락관 2016.07.31 22:36
    해결되었습니다. 감사합니다. 이미지도 잘 찾고 비활성 클릭도 잘 되는군요
    Gdip만 인클루드 하는줄 알았네요

List of Articles
분류 제목 글쓴이 최근변경 추천
질문 오토핫키 에디터 제작. 9 프리헌터스 2015.09.11 4/0
질문 매크로 제작자분들께 인증에 관한 질문드립니다. 17 모바게 2016.01.22 3/0
질문 텍스트를 가져오고 싶습니다. 6 _Crash 2022.12.14 3/0
질문 매크로좀 오랜만에 다시보고자 접속을... 7 joeypre 2021.09.27 3/0
질문 구이 좌표 따는법 1 _Crash 2015.06.21 2/0
질문 settimer 를 돌릴껀데 진행에 방해받지않게 돌릴수있을... 4 _Crash 2015.07.18 2/0
질문 다른프로그램의 listview 읽는법 1 _Crash 2015.07.31 2/0
질문 고유의 컴퓨터 ID 뭐가있을까요? 6 _Crash 2019.11.26 2/0
질문 사인코드 어떻게 뚫죠? 2 푸파재대결 2023.02.24 2/0
질문 핫린이 한수 여쭙습니다 ^^ 3 ddd123 2023.02.24 2/0
질문 오토핫키 질문이요... 12 KaKa 2021.05.19 1/0
질문 오토핫키 쌩초보입니다. 9 미쓰광 2015.01.05 1/0
질문 오토핫키 배우고 싶어요. 10 천사요피엘 2014.12.08 1/0
질문 run명령어로 크롬 주소오픈할때요. 12 우후훅 2014.11.27 1/0
질문 와 ,,,핫오토키는 뭔가여... 3 찬쓰찬쓰 2014.12.12 1/0
질문 이미지서치 내것에선 잘되고 남것은 안되는경우? 11 파더 2014.12.15 1/0
질문 오토핫키 매크로 사용하기 어려울까요?? 6 얌마얌마얌 2014.12.16 1/0
질문 비활성으로 마우스 조작법에 대해 문의드려요 3 디벨로퍼 2014.12.17 1/0
질문 몬길 2개 다중 매크로 돌리기 질문드려요. 9 간부은녀석 2015.03.27 1/0
질문 이미지파일에서 이미지 인식하는 방법 질문드립니다 17 Hangoon 2015.02.10 1/0
Board Pagination Prev 1 2345678910 ... 173 Next
/ 173

전체 최신 인기글

전체 주간 인기글