오토핫키 커뮤니티

질문
2015.06.08 15:00

비활성 고수님 도와주세요

조회 수 690 추천 0 댓글 24

https://i.imgur.com/OfWviCL.png

비활성메크로 만들어볼려고 모바게님 함수로 공부중인데요

아이콘 클릭하고 공지사항까지는 진행되는데

팝업창을 찾아서 좌표클릭하게 했더니 위 사진처럼?

마우스 포인터 우측 하단위치에 좌표클릭 이라고만 뜨고 클릭이 안됩니다.

마우스 포인터가 블루스택 밖에있으면 그곳에 좌표클릭이라고 뜨고요

그리고?

if(CheckImage( "\raven\error\팝업창.bmp")=1) ; 팝업창.bmp 이미지를 찾았다면

? {

? ?ClickPosition(679, 417) ; X, Y 좌표를 클릭해라

? }

위에 행동을 하면 팝업창이 안뜰때까지 반복하는건가요?

?waitImageClick("\raven\error\확인.bmp")?전에 팝업창이 몇번발생해서 팝업창이 안뜰때까지?

반복하게 해야하거든요




;==================실행=========================

#NoEnv ?; Recommended for performance and compatibility with future AutoHotkey releases.

coordmode, pixel, screen

#SingleInstance, force

SendMode Input ?; Recommended for new scripts due to its superior speed and reliability.

SetWorkingDir %A_ScriptDir% ?; Ensures a consistent starting directory.

SetBatchLines,-1

ListLines, Off

ActiveID := "BlueStacks App Player"

DebugMode := 1


실행:

?waitImageClick("\raven\error\아이콘.bmp")

?waitImageClick("\raven\error\공지사항.bmp")

?if(CheckImage( "\raven\error\팝업창.bmp")=1) ; 팝업창.bmp 이미지를 찾았다면

? {

? ?ClickPosition(679, 417) ; X, Y 좌표를 클릭해라

? }

?waitImageClick("\raven\error\확인.bmp")

Return

;====================함수=====================

; 이미지 서치

; seconds : 시간 지정 (기본설정상 1초 = 10번 시도, 0.5초 = 5번 시도함)

; imgX, imgY : 리턴받기 위해 사용

; fromX , fromY , toX , toY : 이미지 서치 범위 지정

; 리턴값 : 1 = 이미지 찾음 , 0 = 이미지 못찾음, -1 = 이미지 파일 없음

CheckImage(img, seconds=0, ByRef imgX="", ByRef imgY="", fromX=0, fromY=0, toX=0, toY=0) {

? ? global ActiveID, DebugMode

? ? Sleep, 10


? ? If ( ActiveID)

? ? ? ? WinGetPos, winX, winY, winW, winH, % ActiveID

? ? Else

? ? ? ? winX := 0, winY := 0, winW := A_ScreenWidth, winH := A_ScreenHeight


? ? sleepTime := 100

? ? times := seconds * (1000 / sleepTime)

? ? If ( times=0)

? ? ? ? times := 1


? ? x := winX, y := winY, w := winX+winW, h := winY+winH

? ? If (fromX && fromY && toX && toY)

? ? {

? ? ? ? w := x+toX, h := y+toY, x := x+fromX, y := y+fromY


? ? ? ? If ( DebugMode = 1)

? ? ? ? {

? ? ? ? ? ? ToolTip, 범위시작, x, y, 11

? ? ? ? ? ? ToolTip, 범위끝, w, h, 12

? ? ? ? }

? ? }


? ? Loop, %times%

? ? {

? ? ? ? ImageSearch, oX, oY, x, y, w, h, *50 %A_ScriptDir%\%img%

? ? ? ? If ( ErrorLevel = 0)

? ? ? ? {

? ? ? ? ? ? imgX := oX

? ? ? ? ? ? imgY := oY

? ? ? ? ? ? If ( DebugMode = 1)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? ToolTip, %img%, imgX, imgY, 10

? ? ? ? ? ? }

? ? ? ? ? ? Return 1

? ? ? ? }

? ? ? ? Else If ( ErrorLevel = 2)

? ? ? ? {

? ? ? ? ? ? MsgBox, , , 이미지 없음 : %img% , 1

? ? ? ? ? ? Return -1

? ? ? ? }

? ? ? ? Sleep, %sleepTime%

? ? }

? ? Return 0

}


; 비활성 이미지 클릭

; seconds : 시간 지정 (CheckImage 설정에 따름)

; fromX , fromY , toX , toY : 이미지 서치 범위 지정

; 리턴값 : 1 = 이미지 찾음 , 0 = 이미지 못찾음, -1 = 이미지 파일 없음

ClickImage(img, seconds=0, fromX=0, fromY=0, toX=0, toY=0) {

? ? Sleep, 10


? ? result := CheckImage( img, seconds, x, y, fromX, fromY, toX, toY)

? ? If (result = 1)

? ? {

? ? ? ? global ActiveID, DebugMode, WindowCaptionHeight, WindowBorderWidth, WindowBorderHeight


? ? ? ? WinGetPos, winX, winY, winW, winH, % ActiveID


? ? ? ? px:=x-winX-WindowBorderWidth

? ? ? ? py:=y-winY-WindowBorderHeight-WindowCaptionHeight


? ? ? ? p := px|py<<16


? ? ? ? If ( DebugMode = 1)

? ? ? ? {

? ? ? ? ? ? ToolTip, 이미지 클릭 %img%, x, y, 10

? ? ? ? }


? ? ? ? PostMessage, 0x201, 0, %p%, , % ActiveID

? ? ? ? PostMessage, 0x202, 0, %p%, , % ActiveID

? ? }


? ? Sleep, 200

? ? Return result

}


; 비활성 좌표 클릭

; x, y 좌표를 클릭

ClickPosition(x, y) {

? ? global ActiveID, DebugMode, WindowCaptionHeight, WindowBorderWidth, WindowBorderHeight

? ? Sleep, 10


? ? px:=x-WindowBorderWidth/2

? ? py:=y-WindowBorderHeight/2-WindowCaptionHeight


? ? p := px|py<<16


? ? PostMessage, 0x201, 0, %p%, , % ActiveID

? ? PostMessage, 0x202, 0, %p%, , % ActiveID


? ? If ( DebugMode = 1)

? ? {

? ? ? ? WinGetPos, winX, winY, winW, winH, % ActiveID

? ? ? ? ToolTip, 좌표클릭, winX+px, winY+py, 10

? ? }

? ? Sleep, 200

? ? Return 1

}


; 비활성 마우스 드래그

; (fromX, fromY) 좌표에서 (toX, toY) 로 드래그함

MouseDrag(fromX, fromY, toX, toY) {

? ? global ActiveID, DebugMode, WindowCaptionHeight, WindowBorderWidth, WindowBorderHeight

? ? Sleep, 10


? ? px1 := fromX-WindowBorderWidth/2

? ? py1 := fromY-WindowBorderHeight/2-WindowCaptionHeight


? ? p1 := px1|py1<<16


? ? px2 := toX-WindowBorderWidth/2

? ? py2 := toY-WindowBorderHeight/2-WindowCaptionHeight


? ? p2 := px2|py2<<16


? ? PostMessage, 0x201, 0, %p1%, , % ActiveID

? ? PostMessage, 0x200, 0, %p2%, , % ActiveID

? ? PostMessage, 0x202, 0, %p2%, , % ActiveID


? ? If ( DebugMode = 1)

? ? {

? ? ? ? WinGetPos, winX, winY, winW, winH, % ActiveID

? ? ? ? ToolTip, 드래그시작, winX+px1, winY+py1, 11

? ? ? ? ToolTip, 드래그종료, winX+px2, winY+py2, 12

? ? }

? ? Sleep, 200

? ? Return 1

}

;이미지 서치

imageSearcher( ByRef imgX, ByRef imgY, img)?

{

? ? global ActiveID

? ? WinGetPos, winX, winY, winW, winH, %ActiveID%


? ? ImageSearch, oX, oY, winX, winY, winX+winW, winY+winH, *50 %A_ScriptDir%\%img%

? ? If ( ErrorLevel = 0)

? ? {

? ? ? ? imgX := oX

? ? ? ? imgY := oY

? ? ? ? return 1

? ? }

? ? else If ( ErrorLevel = 1){

? ? ? ? return 0

? ? }

}


;클릭

sendClick( x, y) {

? ? global ActiveID

? ? WinGetPos, winX, winY, winW, winH, %ActiveID%

? ? SysGet, capH, 4 ; 캡션Height

? ? SysGet, bordW, 32 ; 보더Width

? ? SysGet, bordH, 33 ; 보더Height


? ? px:=x-winX-bordW

? ? py:=y-winY-bordH-capH


? ? p := px|py<<16


? ? PostMessage, 0x201, 0, %p%, , %ActiveID%

? ? PostMessage, 0x202, 0, %p%, , %ActiveID%

? ? Sleep, 200

? ? Return

}


sendClick2( x, y)?

{

? ? global ActiveID

? ? SysGet, capH, 4 ; 캡션Height

? ? SysGet, bordW, 32 ; 보더Width

? ? SysGet, bordH, 33 ; 보더Height


? ? px:=x-bordW/2

? ? py:=y-bordH/2-capH


? ? p := px|py<<16


? ? PostMessage, 0x201, 0, %p%, , %ActiveID%

? ? PostMessage, 0x202, 0, %p%, , %ActiveID%

? ? Sleep, 200

? ? Return

}


;서치앤클릭

imageSearchClick(img)?

{

? ? If imageSearcher( x, y, img) = 1?

? ? {

? ? ? ? sendClick( x, y)

? ? ? ? Return 1

? ? }

? ? Return 0

}


;이미지 찾을때까지 대기

waitImage(img) {

? ? Loop {

? ? ? ? If imageSearcher( x, y, img) = 1?

? ? ? ? {

? ? ? ? ? ? Break

? ? ? ? }

? ? ? ? Sleep, 500

? ? }

? ? Sleep, 200

? ? Return

}


;이미지 찾을때까지 대기후 클릭

waitImageClick(img) {

? ? Loop {

? ? ? ? If imageSearchClick( img) = 1

? ? ? ? {

? ? ? ? ? ? Break

? ? ? ? }

? ? ? ? Sleep, 500

? ? }

? ? Sleep, 200

? ? Return

}


  • profile
    외치기 2015.06.08 17:41

    반복을 하려면 루프를 돌리시면 되겠죠.

    1. 팝업 있는지 검사한다.

    2.1 팝업이 있으면 팝업을 닫는다 -> 다시 1번으로

    2.2 팝업이 없으면 팝업을 닫은 후 나오는 화면(예를들면 메인) 이 있는지 검사한다

    3.1 메인이 있으면 루프탈출

    3.2 메인이 없으면 다시 1번으로

  • 민서s2아빠 2015.06.08 19:51
    기존 비활성 전에는 만들어 사용했었는데요
    비활성 배워보면서 방법을 모르겠어서요 ㅜㅜ
  • profile
    외치기 2015.06.09 09:19
    활성으로 만들어 보셨다면 어려운거 크게 없으실텐데...
    차이라고는 비활성은 마우스가 직접적으로 움직이지 않는다는점과 좌표계산법이 다르다는점
    그리고 타이틀이 꼭 있어야 한다는점 정도인데
  • 설일야 2015.06.09 09:43
    저도 활성으로는 다 만들었는데 비활성이 생각처럼 잘안되서.. 가입했는데..
    집에가면 육아때문에 요즘 통하질 못하네요.. ㅠㅠ
  • 민서s2아빠 2015.06.09 12:33
    저도 육아때문에 ㅋㅋ 폰을 보고있을수가 없어서 공부중이에요
  • 민서s2아빠 2015.06.09 12:34
    활성은 예시보면 감이 와서 그냥 이미지만 바까가며 적용했는데
    비활성하려니 함수라는게 등장하면서 못알아 먹겠어요 ㅎㅎ
    활성도 이해해서 만든거보다 예시문 카피로 수정해서 적용시켜보며 한거라서요 잘안되네요 ㅎㅎ
  • 제발등업좀2 2015.06.08 18:33
    if(CheckImage( "\raven\error\팝업창.bmp")=1) ; 팝업창.bmp 이미지를 찾았다면
    {
    ClickPosition(679, 417) ; X, Y 좌표를 클릭해라
    }

    이건 걍.. 이미지서치입니다.. 만약에 이미지가있으면 찾아라는.. 그런구문입니다.
  • 민서s2아빠 2015.06.08 19:56
    팝업창.bmp을 찾아서 679, 417 좌표를 클릭하게 하려면 어떻게 해야하나요?
  • 리체 2015.06.08 18:39

    팝업창을 찾아서 좌표클릭하게 했더니 위 사진처럼?

    마우스 포인터 우측 하단위치에 좌표클릭 이라고만 뜨고 클릭이 안됩니다.

    마우스 포인터가 블루스택 밖에있으면 그곳에 좌표클릭이라고 뜨고요


    이것은 툴팁명령으로 인해 표시되는겁니다. 마우스포인트를 따라다니는걸 보니, 타이틀이 제대로 적용 안되는것 같네요.

  • 민서s2아빠 2015.06.08 19:57
    머리가 딸리나봐요 알려주셔도 이해가 안가네요 ㅎㅎ
  • 리체 2015.06.09 10:58
    ToolTip [, Text, X, Y, WhichToolTip] ;기본 사용법

    ToolTip, 좌표클릭, winX+px, winY+py, 10 ;ClickPosition(x, y) 함수에 있는 명령줄

    텍스트를 좌표 x,y 에 표시함 (좌표가 없을시 현재 위치한 마우스포인트에 표시)
    그리고 이 툴팁을 10에 (멀티 툴팁을 표시할때 사용 1-20까지 지정가능) 기억
    winX, winY는 창이름의 좌측 상단 좌표 - 본문대로라면 블루스택이 됩니다.
    px:=x-WindowBorderWidth/2
    py:=y-WindowBorderHeight/2-WindowCaptionHeight
    px, py 는 주어진 x,y좌표에 보더값의 1/2, 캡션을 뺀값

    x,y 좌표값은 본인이 지정하셨거나, 이미지서치에서 찾은 좌표를 이용할테니
    어디쯤에 툴팁이 표시되야 정상인지 아시겠죠?

    ClickPosition 함수는 이미지서치에서 찾은 좌표를 바탕으로 클릭하고 디버그모드가 1일때 클릭지점을 확인할수 있도록 사용하시라고 만든것입니다.
    보통 보더값이 8인데, 1/2 하였으니 4포인트만큼 차이나게 되어 있습니다.
  • 스피릿치 2015.06.08 23:02

    레이븐 매크로 만드시나 보네요 ㅎㅎ

    저도?여기저기 찾으면서 지금 자동시작,탐험,길드,결장까지 만들엇는데

    저희 같은 초짜는 알고리즘 짜기가 힘들어서

    쉽게 만드려면 함수부분 최대한 간략하게 하셔야되요


    비활성 드래그는 도시락 전까지는 필요없으니깐 제쳐두시고

    이미지서치,비활성클릭 부분만 최대한 간결하게 쓸수 있도록 만들어보세요

    전 경로는 고정으로 만들어놓고

    if search("파일이름","bluestack") = 0

    click(x좌표,y좌표)

    이런식으로 만들어서 쓰고잇어요

  • 민서s2아빠 2015.06.09 01:33
    한번해봐야겠네요 감사합니다
  • 제발등업좀2 2015.06.09 09:18

    타이틀은 제대로 지정하셨는지요??

    모바게님 함수를 보시면.. 타이틀을 지정하지않으시면 걍 전체창에서 서치를 하고 ..타이틀을 지정하면..

    창안에서 서치를 합니다..

    ActiveID := "해당 창이름"

    대충 이런식으로 먼저 창이름을 지정하신후에 사용하셔야합니다..



  • 민서s2아빠 2015.06.09 12:39
    ActiveID := "BlueStacks App Player"
    젤위에 보시면 있는데요 안되네요
  • 제발등업좀2 2015.06.09 14:34
    coordmode, pixel, screen

    요거 아래.. 마우스도 한번넣어보시겠어요.. 저기위에가 전체소스이신가요??
  • 민서s2아빠 2015.06.10 15:17
    내용은 모르겠고 아래처럼 그냥 다른분 소스에서 복사해서 쓰니까 작동은 하더라고요
    근데 블루스택 좌표가 spy로 찍은 좌표랑 틀린건가요? 찍은 좌표랑 틀린곳을 클릭해서 임의로
    좌표를 옮겨서 사용중입니다. 상세설명을 검색해봐도 못찾겠어요

    startTime:=A_TickCount
    SetDefaultMouseSpeed,0
    SetKeyDelay,-1
    SetControlDelay,-1
    SetBatchLines, -1
    SetWinDelay,-1
    SetMouseDelay,-1

    IfWinExist, BlueStacks App Player

    WinActivate, BlueStacks App Player
    WinSet, AlwaysOnTop, On, BlueStacks App Player
    WinGetPos, X, Y, W, H, BlueStacks App Player
    X2:=X+W
    Y2:=Y+H

    CoordMode, Pixel, Screen
    CoordMode, ToolTip, Scree



    시작:
    Loop
    {
    CheckImage( "\raven\error\팝업창.bmp" ) = 1
    {
    ClickPosition(697, 453)
    sleep, 2000
    }

    }
    팝업창을 찾아서 클릭하는것까지는 해결했는데요
    루프탈출은 어떻게 걸어야 하는지 모르겠네요 죄송한데 예시문 하나 만들어주실수 있나요?
  • 제발등업좀2 2015.06.10 18:05
    저번에 루프탈출 시간대비해서.. 나가는거 예시해드리지않앗나요?
  • 민서s2아빠 2015.06.11 15:26

    loop
    {
    if (A_TickCount-startTime>10000) ;;기준으로 10초 뒤에 루프탈출 하라 (1000단위가 1초)
    {
    break
    }
    CheckImage( "\raven\error\팝업창.bmp" ) = 1
    {
    ClickPosition(697, 453)
    sleep, 2000
    }
    }
    비활성에서도 이렇게 하면 되는거에요?

  • 제발등업좀2 2015.06.10 19:06
    그리고.. 블택은 안써봐서 모르겠으나.좌표가틀리다면. 캡션과 보더값이 틀리지않을까요? 모바게님 함수보시면.. 클릭 하는부분에서 보면 16진수로 변환하기전에 캡션값과 보더값을 빼주고있습니다.. 이값이.. 아마 지니모션 의캡션과 보더값을 계산한걸로알고있는데.. 블택에서도 같은값을 써야 하는지 를 잘모르겠네요.. 확인해봐야겠네요 저두.. ㅋ
  • 민서s2아빠 2015.06.11 15:29
    ActiveID := "BlueStacks App Player"
    DebugMode := 1

    ; 기본 설정

    CoordMode, Pixel, Screen
    CoordMode, ToolTip, Screen

    SysGet, WindowCaptionHeight, 4 ; 캡션Height
    SysGet, WindowBorderWidth, 32 ; 보더Width
    SysGet, WindowBorderHeight, 33 ; 보더Height

    으로 했습니다.
  • 우후훅 2015.06.09 14:04

    비활성에 함수가 필요한것이 아니라, 비활성을 좀 더 편하게 반복해서 쓰는걸 줄이고자 함수를 쓰는건데요

    우리가 이미지서칭할때 반복해서? ImageSearch, oX, oY,~~??? If ( ErrorLevel = 0)? 이걸 쓰듯이 ,

    이걸 줄여서 간단히 함수로 사용하는패턴이죠.

    postmessage역시 동일한것이구요. 함수를 억지로 쓰려고 하기보다는,

    일단 반복적으로 쓰더라도 무조건 길게 무대뽀로 작성한 후에 , 잘 작동하면 이때부터 함수로 문장을 좀 줄여보려고

    하다보면 함수 접근이 더 쉬어집니다.

  • 제발등업좀2 2015.06.09 14:58

    평션을 잘못 기입 하신게 아니라면...이미지 서치 를 못한게 아니고 그부분을 걍 지나가는게 아닐까요?


    waitImageClick("\raven\error\아이콘.bmp")? ;;기다리고 있다가 이미지가 뜨면.. 클릭

    ?waitImageClick("\raven\error\공지사항.bmp") ;;위와 동일

    ?if(CheckImage( "\raven\error\팝업창.bmp")=1) ; 이부분에서 루프 도아니고 걍 이미지 서치이니깐 이부분에서 해당이미지가 나오지 않는다면 그냥 지나갑니다..? 그러니깐 팝업창 이미지가 아직 띄지도 않아는데.. 먼저 이미지서치가 동작하면

    당연이 그냥 지나가겠조 .. 그래서 안되는거 아닐까여?

    ? {

    ? ?ClickPosition(679, 417) ; X, Y 좌표를 클릭해라

    ? }

    ?waitImageClick("\raven\error\확인.bmp")

  • 이모지 2020.04.03 12:02

    비활성 키보드는 거의 없다...


List of Articles
분류 제목 글쓴이 최근변경 추천
질문 몇가지 질문좀 드리겠습니다 ㅜ 도움 좀 부탁드릴게요 ㅜ 5 vesti 2015.06.10 0/0
질문 비활성 고수님 도와주세요 24 민서s2아빠 2020.04.03 0/0
질문 여러가지 이미지중 화면에 나타난 이미지를 클릭하는? 1 강남앞집오빠 2015.06.08 0/0
질문 WinGetTitle처럼 ClassNN을 추출하는 방법이없을까요? 3 법돌 2015.06.09 0/0
질문 오토핫키 배울때 3 크흠함 2015.06.12 0/0
자유 쿠키런 오토핫키 매크로 아직되나요? 19 강남앞집오빠 2018.12.24 0/0
질문 프리스타일 자동슈팅 4 스파크 2015.06.08 0/0
질문 오토핫키 로그인질문 2 Boom 2015.06.08 0/0
질문 찾아보다가.. 질문하나만 합니다 ㅠ 2 궁금증호야 2015.06.06 0/0
질문 오토핫키로 만들수있는것 2 크흠함 2015.06.06 0/0
질문 오핫으로 블택에 있는 앱 바로 실행 어떻게 하는건가요? 6 지니블렉션 2015.06.10 0/0
질문 파일 가상화에 대한 질문좀 드릴게요. ㅠ 3 우후훅 2015.06.09 0/0
질문 WinGetTitle, Title, A 에서 "A"는 왜 넣는건가요? 3 법돌 2015.06.06 0/0
질문 오토핫키 이미지서치질문합니다. 1 Boom 2015.06.05 0/0
질문 오토핫키 이미지서치 질문해요. 2 Boom 2015.06.05 0/0
질문 controlclick으로 드래그 하는방법있나요? 3 칼시이나 2015.10.30 0/0
질문 레알팜 이라는 게임도 ahk로 이미지서칭해서 반복작업... 2 우유줄까 2015.06.06 0/0
질문 비활성 이미지서치 질문드립니다. 12 민서s2아빠 2015.06.08 0/0
질문 PostMessage질문있습니다. 7 법돌 2015.06.06 0/0
질문 @핸콕 님~ 9 헐키 2015.06.25 0/0
Board Pagination Prev 1 ... 163164165166167168169170171 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글