매크로

조회 수 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
분류 제목 글쓴이 최근변경 추천
정보 항상위에있는 메모장 스크립트 성지순례왔다 2015.06.21 0/0
질문 AHK를 배울수 있는 책을 없을까요? 5 블루조이 2015.06.26 0/0
질문 노트북 이미지서칭만 안되요! 제발 도와주세요(사례) 12 세macro 2015.06.27 0/0
질문 adb 이용 블루스택 화면 캡쳐... 열감기 2015.06.20 0/0
질문 ListView 에 대해 또 질문드립니다.ㅠ 3 우후훅 2015.06.26 0/0
질문 오핫 잘 사용되다.. 문제가 생겻습니다.. 흠 7 궁금증호야 2015.06.20 0/0
질문 이미지서치 정확도질문 3 컴팩 2015.06.20 0/0
질문 edit 할때 보이던 active window info 아이콘이 안보... 2 푸른호수 2015.06.20 0/0
질문 비활성 이미지 서치할경우 transwhite 기능을 어떻게 ... 4 으아잉 2015.11.18 0/0
질문 마우스 HOVER 방법을 아직 못찾았네요. 4 우후훅 2015.06.22 0/0
질문 Progress바 적용하는 방법이 궁금합니다. 7 우후훅 2016.09.05 0/0
정보 활성화된 창으로 esc보내는 라이브러리. 1 헐키 2015.06.19 0/0
질문 GUI Combobox (콤보박스) 에 대한 질문좀 드립니다. 4 우후훅 2015.06.19 0/0
질문 캡쳐프로그램을 제작하고싶은데요.... 2 _Crash 2015.06.19 0/0
질문 ova 원클릭 실행 문의 2 GN3 2015.06.19 0/0
질문 키를 누르면 마우스 좌우를 규칙적으로 누르는 스크립... 3 빈스3678 2015.07.24 0/0
질문 가상화 내부파일을 CMD로 불러올수가 없네요 4 우후훅 2016.01.19 0/0
질문 adb 사용해서 캡쳐하는 것 좀 알려주세요. 2 열감기 2015.10.04 0/0
질문 제작자분들이 새삼 존경스럽네요 5 mvtest 2015.06.17 0/0
질문 이미지서치 질문 1 듯이 2015.06.17 0/0
Board Pagination Prev 1 ... 163164165166167168169170171 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글