매크로

조회 수 2348 추천 0 댓글 15


아래 포스트메시지 관련 질문이 있길래 , 그냥 제가 쓰는 방법이 좀 더러워서?? 다른분들은 어떻게 깔끔하니

쓰시나 궁금하네요.


일단 완전 쌩 입문자들 기준으로 썼으니까, 잘아시는분들은 하위 부분의 스크립작성을 좀 이쁘게 할수 있는 부분에

대하여 조언좀 부탁해요.


일단 포스트메시지는 , 작업창이 비활성인 상태에서 작동이 되는것이기 때문에 ,

픽셀로 좌표를 찾는?imagesearch등의 명령어는 스크린방식으로 해야합니다.

coordmode,pixel,screen 이걸 써야되죠.

coordmode로 별도 지정을 하지 않을경우, 핫키는 기본셋팅이, 모드 relative로 설정된 것으로 알고 있어요.

그렇기에 굳이 coordmode,pixel,relative 나 , coordmode,mouse,relative를 안써도 된다는거죠.


암튼, postmessage를 쓰려면 스크린으로해야하는데, 이유는 작업창(지니모션)이 비활성이라면 다른 창이

활성상태를 의미하죠. 그 창에 대한 좌표들이 relative로 잡히기때문에 비활성이 된 지니모션은 작동을 시킬수 없는거지요.

그래서 ,screen으로 잡을경우 비활성이건 활성이건 모니터 전체기준으로 잡기때문에, 좌표를 찍을수 있게됩니다.


위 내용은 제가 첨 포스트메시지 접할때 햇갈렸던 내용으로 첨 하시는분들 착오없으시라 적었습니다.


이제 포스트메시지 제가 쓰고 있는방식인데요.

다들 이렇게 쓰시는지는 잘,, 다른분거 본거는 그냥 직접숫자넣었더라구요.


다른분들 쓰신거 고대로 같이 쓰면서 주석도 달텐데요. 혹시 제가 잘못 알고 있는부분은 확실히 지적좀부탁해요.

오토핫키 매크로 베스트팁란의 겜도리님이 공개하신 본문을 보고 배꼇습니다. 이렇게 공개해주신분땜에

첨 접할때 진짜 뭐부터 해야하나 쉽게 갈피를 잡을수 있었네요.


^1::?? ; 컨트롤 +1 클릭시 작동
WinGetActiveTitle, 지니모션? ; 활성화된 윈도우창의 이름을 지니모션이라는 변수에 저장
WinGetPos, x,y,width,height,%지니모션%??? ; 지니모션창의 위치를 x,y,width,height 각 변수에 입력 (세부내용하단)

w:=x+width ; 스크린x값에 지니모션창의 넓이값을더해서 최종 하단우측끝부분 좌표값 획득

h:=y+height ;
WinSet, Alwaysontop,on,%지니모션%? ;지니모션창을 항상위로 셋팅,다른창이 가리면 좌표를 읽어올수없기때문
SysGet, xxx, 32 ; 창의 테두리값을 xxx라는변수에 입력?, 32라는숫자가 테두리를 가리키는듯,
SysGet, yyy, 4 ; 창의 캡션(이름)의 범위를 yyy라는 변수에 입력, 4라는숫자가 캡션을 가리키는듯,
ww:=850+xxx*2 ; 지니모션창은 480*800인데 850인이유는 우측의 기능바(볼륨등있는것)가 50이라서 합친겁니다.

???????????????????????? ;거기에 xxx는 좌우의 지니모션의 얇은테두리입니다. 2개니까 *2
yy:=480+yyy+xxx*2 ; 480에 yyy(캡션창)두께에 더하기 테두리2개 , 여기도 역시 테두리 2개 상하로 있죠.
WinMove ,%지니창% ,,,,%ww%,%yy%? ; 이건 위에서 더한 ww , yy 즉,지니모션창의 우측하던끝부분까지의 범위입니다.

?????????????????????????????????????????????????????? ; 이걸로 지니모션창의 전체크기를 재설정하는거죠.

return? ;^1단축키에 대한 스크립트 종료


위 작업을 함으로써 , 지니모션창을 실수로 크게 키웠다거나, 크기를 변경시켰다면, 다시 원상 복귀가 가능합니다.


아래 본 스크립인데요. 친구선택버튼나오는부분만 일부 예제로 하겠습니다.

x,y,w,h의 값은 위에서 이미 변수에 넣어놓은 값들입니다.

F1::

CoordMode, pixel, screen ; 스크린방식으로 픽셀을 찾습니다.

Loop { ; 전체 반복 루프시작


ImageSearch, vx,vy,%x%,%y%,%w%,%h%, *50 img\친구선택메인.png ;현재위치가 친구선택위치인지 구분
if (errorlevel=0){ ?;친구선택위치인 경우
?ImageSearch,vx,vy,%x%,%y%,%w%,%h%, *50 img\친구선택버튼.png? ;친구선택버튼 켜진이미지 찾음

?if (errorlevel=0){ ;이미지 켜졌으면
??gosub,클릭 ; '클릭' 이라는 라벨을 실행한후 다시?이리 돌아옴
??sleep 500
?}
?ImageSearch,vx,vy,%x%,%y%,%w%,%h%, *50 img\입장하기.png ;?위 친구선택버튼켜졌으면클릭후 입장찾음
?if (errorlevel=0){ ;입장하기?이미지 찾았으면
??gosub,클릭 ; 클릭 라벨 실행후 다시 돌아옴.
??sleep 500
?}
}

----생략

} ;루프끝


클릭:
px:=vx - x -7 + 5? ; vx좌표에서-x(스크린상에서 지니모션창 시작x값) -7(창의테두리값xxx와같음) + 5(추가범위)
py:=vy - y - 30 +5 ; vy좌표에서-y(스크린상에서 지니모션창 시작y값) -30(창의캡션23에테두리7) + 5(추가범위)
pm:=px|py<<16 ; 포스트메시지에 쓰는 값, 16비트 형식으로 변경
PostMessage, 0x201, 0, %pm%,,%지니창% ; 0x201은 마우스를 클릭하고 때지않은상태 down과 같음
PostMessage, 0x202, 0, %pm%,,%지니창% ; 0x202은 마우스를?땐 상태,?up과 같음
return




기본적으로 이미지를 찾고 그 이미지의 x,y좌표보다 +5만큼 더해서 그 이미지부분을 클릭하게 되어있구요..

별도로 마우스좌표를 직접입력하여 클릭하는 부분은 아래처럼 해뒀네요.


ImageSearch, vx, vy, %x%, %y%, %w%, %h%, *5 img\동료획득.png? ;동료획득부분인지 확인후
if (errorlevel=0){

?x1:= x + 341 ; 동료획득버튼 나오는부분 범위를 지정하고 있어요. (가끔못찾길래 범위를 정해서 서치하는방식으로)
?y1:= y + 440 ; 각각 스크린좌표인 x, y에?이미지좌표인 relative 좌표를 더해서 스크린방식으로 이미지좌표를
?w1:= x + 480 ; 변수에 저장합니다
?h1:= y + 473
?ImageSearch, vx, vy, %x1%, %y1%, %w1%, %h1%, *50 img\동료획득버튼.png ; 버튼 있나확인 ,확실히하기위해

?if (errorlevel=0){
??xs:=406 ; 이것역시 버튼 좌표를 직접?relative값으로 xs , xy라는 변수에 저장하고 있어요.
??ys:=461
??gosub, 클릭s? ; 클릭s라는 라벨실행후 돌아옵니다.
??sleep 200
?}
}


클릭s:
px:=xs -7 ; 위에서 직접 지정한 relative x값에 테두리값 7을 뺀값을 px변수에 저장합니다.
py:=ys - 30 ; 마찬가지로 , 캡션값23과 , y테두리값7더한 30을 빼고 py변수에 저장합니다.
pm:=px|py<<16

PostMessage, 0x201, 0, %pm%,,%지니창%
PostMessage, 0x202, 0, %pm%,,%지니창%
return




제가 하는 방식이 , 좀 복잡한거 같아요.. 제가 볼때도 가끔보면 헷갈릴 판이에요. 지저분해요..

이렇게 머리 아프게 된게 , 포스트메시지는 스크린방식으로 작동하는데,, 문제는 지니모션의 테두리등을 인식안하니

테두리 캡션 다 빼줘야해서 거기서 , 일반 스크린방식과 차이가 발생하니까 그걸 염두에 둬야한다는게 짜증이네요.

그래서 , 좀더 x,y값을 쉽게 입력하려고 , 라벨로 두가지로 햇네요.

하나는 , 이미지좌표에서 +5더한 곳 클릭하고,

또하나는, 이미지좌표가 아닌 마우스로 클릭해야할 좌표를 직접 입력해서 바로 테두리캡션뺀값 포스트메시지클릭하게요.


볼때마다 좀 지저분해서 , 이거 좀 어떻게 좀 다르게 할수 없나 싶어서요.

혹시 다른분들은 어떤식으로 하는지 궁금합니다.


지저분하게 글을 썼는데 읽느라 고생하셨네요..



  • 디디마 2014.11.16 16:54
    포스트메시지가 뭔지 잘 몰랐는데 예시 스크립트 보니까 이해가 잘되네요 ㅋㅋㅋ

    이미지서치 명령어에 vx vy 부분에, 찾은이미지의 좌측상단 끝부분의 좌표가 나오잖아요?
    친구선택 버튼이미지를 이미지서치로 찾고나서 vx vy 좌표를 x축 양의방향, y축 음의방향으로 약간 조정해준 뒤 조정한 좌표를 포스트메시지에 넣어서 클릭하게 하는건 어떤가요?

    그럼 굳이 테두리크기나 캡션크기를 계산하지 않아도 될것 같은데...


    제가 비활성을 안써봐서 이렇게도 동작이 될지는 모르겠네요 ㅋㅋㅋ
  • 우후훅 2014.11.16 17:03
    kQaEV9u.jpg


    테두리랑 캡션 계산해야되요.. 왜냐하면,, 포스트메시지는 좌측상단 끝 x,y좌표가 게임상화면기준이구요.
    일반 마우스 relative 좌표는 지니모션창의 좌측상단 끝 x,y거든요.. 이게 차이가 있기때문에,
    헷갈리기 무지 쉽습니다.



  • 디디마 2014.11.16 19:33
    아 제가 잘못생각했네요 ㅋㅋㅋㅋㅋ
  • 으뜸어린이 2014.11.16 18:27

    저는 스크립을 잘 못넣어서 보더뺄때는 그냥 클래스좌표 찾아서 직접 계산한다음에

    ?

    wingetpos X,Y,W,H, 지니모션

    X2:=X+W

    Y2:=Y+H

    coordmode,pixel,스크린

    ?

    이미지서치, xx,yy, %X%,%Y%,%X2%,%Y2 %*10 이미지

    ax:=xx-X-(상대좌표-클래스좌표, 제 컴터에선 8차이나요)

    ay:=yy-Y-(상대좌표-클래스좌표, 제 컴터에선 30차이나요)

    N:=ax|ay<<16

    postmessage,~~~%N%~~~

    ?

    이런식으로.. 쓰고있어요 ㅠㅠ 어흑.. 머리가 부족하니까 손이 고생하네요 ㅎㅎ

  • 호로록뚝딱 2014.11.16 20:10
    이미지서치를 함수로 빼서 사용하지않는이상 지금 사용하시는게 일반적입니다.

    한가지 더 말씀드리자면 sysget 으로 캡션과 프레임값을 변수로 지정했는데

    다들 사용하실때 결국 실제 오차만큼 숫자로빼버리네요. 스파이로보고 오차만큼 빼는게 확실하지만

    그렇게쓰실꺼면 sysget을 생략하셔도 상관없습니다. 기왕변수로 받아왔으면 그냥 받아온 변수만큼 빼주면됩니다.

    y:=yy-y-wCaption 뭐 이런식으로 그냥 받아온 변수값을 넣으시면됩니다. 위에서는 yyy로 받아오셧으니 -yyy하시면되겠죠

  • 우후훅 2014.11.16 20:47

    함수로 된것은 본적이 없고, 함수관련글들은 많지 안더라구요. 응용력의 부재죠...
    sysget은 보기쉽게하려고 저렇게 햇어요 본문 보시면, -7(창의테두리값xxx와같음) 이라고 표기해뒀습니당..

    함수에 관해서 한번 찾아보겠습니다. 말씀감사합니다

  • 호로록뚝딱 2014.11.16 21:53
    함수로 된 답도 이게시판에 있습니다.
    lidmt님이 올리신글 보시면 바로 답나옵니다.
    그런데 한가지 말씀드리자면 함수로지정하면 좀 간편하게 코딩을 줄일수있지만 변수를 다른곳으로 넘길때는
    전역변수가 아닌이상 변수를 저장해서 넘겨야하기때문에 오히려 귀찮을수도있습니다.
    또한 이미지서치안에서 조건분기가 많이 일어나게 코딩을짠다면 함수선언해서 쓰는게 무의미해지기도하고요
    결국 각자 코딩스타일에 따라 틀려지는거라 딱히 어떤게 좋다 나쁘다가 없네요.
    위에 글에서 sysget을 말한건 저상태에 깔끔해지길 원하시니 -7 숫자로입력하실꺼면 그냥 sysget지우시는게 낫다고 말씀드린겁니다. sysget이던 -7이던 둘중 하나는 없어도 되는것이니까요~
    지금은 초기단계라 다른사람의 코딩을 흉내내는거지만 익숙해지시면 자신만의 스타일을 찾으실꺼예요~
    홧팅!!
  • 우후훅 2014.11.16 22:31
    lidmt님 글 다시 볼게요. 함수는 어차피 알아야 되는 부분이라, 일단 해볼게요.
    변수를 제가 너무 알아보기 힘들게 x y xc yc xx 이러니까 햇갈려서요. 알아보기쉽게 해야죠.
    현재 핫키 게시판은 거의 뜸해서 호로록님처럼 답해주는 분이 거의 없어서 도움받기가 쉽지가 않네요.
    이 사이트에도 핫키 사용자가 많아져서 많은 매크로들이 공유됐으면 좋겟어요.
  • theruin 2014.11.17 03:21

    저도 님이랑 거의 차이가 없는듯하네요. 단지 라벨식으로 안하고 클릭부분을 함수로 만들어서 쓴다는 차이 뿐이군요.?

    비슷하게 window border 값이랑, 캡션인가 값과 지니모션 위치값구해서 이미지서치 한 값에서 빼버리는식으로 클릭함수 만들어서 쓰고 있습니다.

    님의 라벨부분 차용해서 보면

    sendClick(x,y)

    {

    global ActiveID,startX,startY

    ; ActiveID= 지니모션 ID 변서, startX,startY= wingetPos했을때 지니모션 위치변수, 세 값을 가져오기위해 global 지정

    x:=x-startX -7 ; 7이 아마 window border 값이겠죠
    y:=y -startY- 30 ; 30은 캡션값일거고
    pm:=x|y<<16

    PostMessage, 0x201, 0, %pm%,,ahk_id %ActiveID%
    PostMessage, 0x202, 0, %pm%,,ahk_id %ActiveID%
    return

    }

  • 우후훅 2014.11.17 10:12
    코감기로 컨디션 난조라서 재대로 함수부분을 못보고 잇네요. 함수 이해가 우선인거 같아요. 일단 검색해서 보려구용.보구 제가 이해한부분 의견여쭐게용
  • znel 2014.11.19 00:51

    ㅎ 베스트 가셔야 할 글이네요 .. 유용한 팁 잘보고 갑니다. ^^?

  • 리키0 2014.11.21 00:35

    이 글 또 찾아보게되네요. ㅎㅎ

  • 로켓맨 2015.03.07 02:42

    마우스 클릭은 되는 것 같은데 위치가 다른 것 같아서 한참 찾앗네요 감사합니다.

  • 검정다람쥐 2016.04.07 11:44

    우후훅님. 소스 올려주신 것 너무 좋을 것 같아요. 추측을 한 것은.. 아무리 보아도 (크롬,익스) 테일 자체 문제인것같은데.. 소스에 물음표가 온통 중간중간 끼어있어서 보기도힘들고 제가 쓰기도힘듫어서그래요. ㅠ 부디 원문소스좀 txt나 ahk파일로 좀 부탁드림 안댈까요. 부탁드립니다. ㅠㅠ [email protected] .. 흑 꼭 좀..

  • 우후훅 2016.04.08 08:14
    저건 전에 좀 배울때 했던거라 지금은 없습니다. 게임매크로 제작같은거를 하지 않아서요
    그냥 하나하나 모르는걸 여기 게시판에 질문하세요 이곳이 글 리스폰이 별로 없어도
    고수님들이 계속 모니터 중이라 댓글 잘달립니다.
    질문 쉬운거 자주한다고 뭐라하지 않아요 그러면서 레벨 올리는거죠

List of Articles
분류 제목 글쓴이 최근변경 추천
질문 return 이 궁금합니다 ㅠㅠ 10 밴클리프 2014.11.11 0/0
자유 숨어야산다님 조언 따라 만들어본 픽셀,좌표 확인기! 11 으뜸어린이 2014.11.28 1/0
질문 themida 사용하시는분 계신가요? 7 호로록뚝딱 2014.11.26 0/0
질문 비활성 마우스 질문드립니다. 3 lidmt 2018.02.20 0/0
정보 이미지서치 후 비활성 클릭 17 lidmt 2016.07.02 0/0
질문 이미지서치 부분입니다. 변수에 값을넣는데요. 4 우후훅 2014.11.11 0/0
자유 SciTE4AutoHotkey 자료 요청드립니다. 8 레이븐 2014.11.18 0/0
질문 gui버튼 시작중지 보임안보임설정부분요. 11 우후훅 2015.03.07 0/0
질문 이미지서치 확장자 질문드립니다. 6 생물 2014.11.17 0/0
질문 혹시 핫키 눌러서 수행중에 다른핫키도 먹히게 하는게 ... 3 으뜸어린이 2014.11.15 0/0
질문 GUI 버튼 체크상태 실시간판별 어떻게하나요. 13 우후훅 2014.11.14 0/0
질문 오토핫키 잘하시는분 도움좀 부탁드려요. 3 라디 2014.11.15 0/0
질문 비활성 메크로는 오토핫키만 가능한가요? 28 으뜸어린이 2014.12.01 0/0
자유 특정게임 매크로 작동안되는것들이 문제죠. 6 우후훅 2014.11.15 0/0
질문 이미지서치할 때 같은 폴더내 모든 이미지를 찾는 명령... 5 으뜸어린이 2014.11.18 0/0
질문 별이되라 이미지서치 이부분 잘되시나요? 8 우후훅 2015.01.15 0/0
질문 이거 비활성으로 싹다 바꾸려면 어떻게 해야하나요?? 10 cris 2015.03.20 0/0
자유 핫키, Postmessage 어떻게들쓰고계세요? 15 우후훅 2016.04.08 0/0
질문 gui,add,picture 를 버튼형식으로 만들 수는 없나요?? 10 으뜸어린이 2014.11.26 0/0
자유 오토핫키 함수에 관해서요. 6 우후훅 2014.11.20 0/-1
Board Pagination Prev 1 34567891011 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글