매크로

조회 수 616 추천 0 댓글 12

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

항상 질문만 하는 민서아빠입니다.

질문해가며 하나하나 만들어 가는중인데요

이번엔 비활성을 파보려하는데요 모바게님 소스로 해보려고 하는데


복사해서 실행해 보니?

스샷같은 에러가 나오는데 왜그런건가요?

그냥 복사만해서 실행해봤습니다.?

그리고 아래 에서?test.bmp이미지만 아무곳에 저장해두면 되는건지도 궁금합니다. ?

=========================================================================================


CoordMode, Pixel, Screen

?

CoordMode, ToolTip, Screen

?




SysGet, WindowCaptionHeight, 4 ; 캡션Height

?

SysGet, WindowBorderWidth, 32 ; 보더Width

?

SysGet, WindowBorderHeight, 33 ; 보더Height

?




; 이미지 서치

?

; 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

?

}

?

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

?

#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

?




Gui, Add, Button, gTestSearch, 이미지 서치

?

Gui, Add, Button, gTestSearch2, 이미지 범위 서치

?

Gui, Add, Button, gTestSearch3, 이미지 시간지정 서치

?

Gui, Add, Button, gTestClick, 이미지 클릭

?

Gui, Add, Button, gTestDrag, 드래그

?

Gui, Add, Button, gRestart, 재시작

?

Gui, Show, , 테스트

?

Return

?




GuiClose:

?

ExitApp

?

Return

?




TestSearch:

?

; 기본 서치

?

MsgBox, % CheckImage( "test.bmp")

?

Return

?




TestSearch2:

?

; 범위 서치

?

MsgBox, % CheckImage( "test.bmp", , , , 10, 10, 300, 300)

?

Return

?




TestSearch3:

?

; 3초동안 찾음

?

MsgBox, % CheckImage( "test.bmp", 3)

?

Return

?




TestClick:

?

; 기본 클릭 테스트

?

MsgBox, % ClickImage( "test.bmp")

?

Return

?




TestDrag:

?

; 드래그 테스트

MouseDrag(100, 100, 200, 200)

Return


Restart:

?

Reload

?

Return


  • 제발등업좀2 2015.06.05 15:47
    ^^ 안녕하세요 ㅋㅋ. 비활성 손대시는군요 ㅋㅋ

    하시기전에 우선 함수 를 좀 아셔야합니다..

    함수는 보통

    함수명
    함수내용 이렇게 이루어져있습니다..

    그리고 함수를 사용할때는. 함수제못만 가지고와서 사용하시면 됩니다.. 함수내용은 아무대나 편한데 붙혀넣으시구요.. 매크로 본문에는 함수제목만쓰시면 됩니다..
    그리고 비활성 을 하시기위해선. 타이틀 도 설정하셔야합니다.. 그래야 포스메세지로 .창에 직접 명령어를 전달하실수있으니까요 ..핸드폰이라 또 예문을 못적어드리네요 ..이따 컴터잡으면 예문하나적어드리겠습니다
  • 민서s2아빠 2015.06.05 16:06
    항상 댓글감사하고 또 감사합니다.
    제발등업좀2님 없었으면 못만들었을 정도네요 ㅎㅎ
    역시 이해는 못하고
    그냥 다른분들이 올려주신 거 복사해서 해보면서
    이제좀 함수가 몬지 감은 오는거 같은데 역시 머리가 딸리네요 ㅜㅜ
    일단 이미지 찾으면 클릭 하는거 까지해서 공지사항까지 클릭했는데요
    다음에 찾아야할 이미지는 클릭할수 있는이미지가 아니라서
    이미지 찾으면 특정좌표를 클릭하게 해야하면서 이미지가 없을때까지 반복하게 해야하는데
    그부분에서 또 막히네요

    #NoEnv ; 변수명이 환경변수인지 체크하는걸 무시, 스크립트 속도 상승과 환경변수 혼동으로 인한 버그 방지
    coordmode, pixel, screen
    SetDefaultMouseSpeed, 0
    SetWorkingDir %A_ScriptDir%
    ActiveID:= "BlueStacks App Player"

    ; ================================ 본문시작 =========================================

    f1:: ;start

    실행:
    waitImageClick("아이콘.bmp")
    waitImageClick("공지사항.bmp")

    f2::pause
    f3::reload

    ; =============================== 함수선언 ==========================================
    ;이미지 서치
    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
    }
  • 제발등업좀2 2015.06.05 17:22
    if (imageSearcher( X, Y," img") =1)
    {
    이미지찾으면 다음행동
    }
    return

    모바게님 함수를 보시면 이미지를 찾으면 리턴 값이 1 입니다.
    즉 저위에제가 써놓은건
    만약에 이미지 을 찾으면 중괄호 안에 해당하는 명령어를 수행해라 이렇개되겠죠.. 리턴값을 잘보시면 갑이있습니다 ㅋ. 그리고 이프문도 활용하시다보면 좋은게많습니다 걍 참고만하시길 ㅎㅎ
  • 제발등업좀2 2015.06.05 17:36
    걍 위처럼 이프문쓰시고 루프돌리면 안되나요 ㅋ 정확이 어떤내용인지 모르지만 ㅋ. 만약에 저이미지가있으면 해당내용실행할것이고.. 없다면 걍 넘어갈테니까요 ㅋㅋ 이프문이 이래서좋습니다 ㅋ.. 이미지가없다면 다음 스크립트를진행할테니까요
  • 민서s2아빠 2015.06.05 17:51
    아무것도 모르니 질문을 어떻게 해야하는지 ㅎㅎ
    waitImageClick("아이콘.bmp")
    waitImageClick("공지사항.bmp")
    까지는 이미지가 나올때까지 대기하다가 찾아서 클릭을 하더라고요
    그 이후 작업을 하고 싶은게 팝업창이 뜨는걸 없엘려고 하는데요
    클릭해야하는곳에 이미지가 투명하면서 창마다 색상이 틀려서 다른곳에 이미지를 따서
    그 이미지가 있으면 특정좌표를 클릭하게 하는 본문시작에 넣을 명령어가 궁굼해서요
    이 팝업창을
    비활성 하기전엔
    이벤트:
    loop
    {
    if (A_TickCount-startTime>60000)
    {
    break
    }
    ImageSearch , GetX, GetY, 1, 1, A_ScreenWidth, A_ScreenHeight, *20 g:\gmc\bmp\raven\error\팝업창.bmp
    If ( ErrorLevel = 0)
    {
    MouseClick, left, 685, 442
    }
    else if ( ErrorLevel = 1)
    {
    break
    }
    }
    이렇게 해결했었거든요
  • 제발등업좀2 2015.06.05 19:25
    전에도 말씀드려다시피 루프문에 에러레벨 1은 쓰시는건 별로 입니다.. 어짜피 시간계산해서 루프문 탈출 하는명령어도있구요 ㅋㅋ 제가 모바게님 함수를 안써서.. 잫모르지만 조금만 병형시키면 될것같습니다 이따컴터 잡으면 또 예문 써드리겠습니다.
  • 제발등업좀2 2015.06.06 00:28
    자 모바게님의 훌륭한 소스가 있으니 응용해보죠

    적어주신 소스를 펑션으로 만들면 이렇게 되겠네요..
    팝업이미지(img,mx,my,time)
    {
    startTime:=A_TickCount
    breaktime := time*1000 ;time에 1를 입력하면 1000초 이런식으로 계산하기위해서
    loop
    {
    if (A_TickCount-startTime > breaktime)
    {
    break
    }
    if (imageSearcher( X, Y, img) =1)
    {
    sendClick2( mx, my) ;해당이미지를 찾으면 펑션제목에 적어둔 좌표값을 클릭
    }
    }
    return ;루프가 깨지면 .. 리턴 시킨다.
    }
    위에 소스 토대로 펑션만들어봤습니다. 잘작동하는지는 실험못해봤네요
    핸드폰이라서 ㅠㅠ 걍 참고만하시길바랍니다.
  • 제발등업좀2 2015.06.06 00:36
    이렇게 평션만들면.. 원하시는 시간만큼 이미지서치하거 이미지가있으면 원하는좌표를 클릭하겠죠...암튼 매크로만드실때 펑션을 적극적으로 사용하시는게 편합니다.. 같은구분을 반봇적으로 적을 필요는없으니가요 ..펑션만잘만들어도.. 고쉽고투는 필요없습니다.. 실제로 전매크로만들때 고투고쉽잘쓰지안습니다.
  • 민서s2아빠 2015.06.08 09:51
    주말엔 아기보느라 못해봤네요
    테스트해보고 결과 말씀드릴게요
  • profile
    외치기 2015.06.05 16:52

    Blank Parameter?

    공백 인자

    즉 함수에서 필요로 하는 파라미터가 공백이라는 뜻입니다.

    파라미터가 부족거나 올바르지 않다는 의미죠.

  • 민서s2아빠 2015.06.05 17:40
    댓글 감사합니다.
    파면팔수록 어렵내요 ㅜㅜ
  • profile
    외치기 2015.06.05 18:08
    함수라는게 그리 어려운게 아니에요.
    내가 나만의 명령어를 만든다고 이해하면 편하실거에요.

List of Articles
분류 제목 글쓴이 최근변경 추천
질문 파일 가상화에 대한 질문좀 드릴게요. ㅠ 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
질문 지니모션이든 블루스택이든 매크로로 한영 바꿔가며 치... 4 로우얄 2015.07.22 0/0
질문 gui edit 복사 다시 질문 드립니다. 사진첨부 7 솜주먹 2015.06.04 0/0
질문 질문 드립니다. 4 이아이온 2015.06.05 0/0
질문 gui edit1에 입력된 값을 edit2에서 출력되도록 하고 ... 2 솜주먹 2015.06.04 0/0
질문 CMD내에 보여지는 글들을 GUI로 가져오는 방법이 어떤... 6 우후훅 2015.06.06 0/0
질문 이미지서치 관련 질문드립니다. 10 헐키 2015.06.04 0/0
질문 세나 매크로 2 아니마아 2015.06.07 0/0
질문 [사무업무]Postmessage혹은 Controlsend로 창2개컨트롤... 2 법돌 2015.06.04 0/0
자유 아무 지식없이 오핫한테 덤볏다가... 3 레이봉11 2015.06.07 0/0
질문 guicontrl 맵선택 , 저는 이렇게 만들어 보았습니다. 1 헐키 2015.06.03 0/0
질문 단축키? 질문좀 드릴게요 아시는분 1 쉬르릴 2015.06.02 0/0
Board Pagination Prev 1 ... 163164165166167168169170171 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글