오토핫키 커뮤니티

조회 수 271 추천 0 댓글 27

요즘 심즈를 하고있는데 노가다성이 심해서 돈식물을 자동으로 심는 간단한 매크로를 만들려고 했는데요


제가 하려는것은 특정 이미지가 발견 안되었을떈 특정 좌표클릭(421,434)하고 잠시뒤 다시 어떤 특정좌표(399,301) 클릭을 하는것인데요.이미지가 안되면 딜레이가 생기는거 보면 명령은 진행되는거 같은데 막상 클릭이 특정좌표 클릭이 되질 않는 현상이 발생하고있습니다. 무엇이 문제인지 감을 못잡겠습니다 문제가 뭔지 알려주시면 정말 감사할 것 같습니다  또 블택이 컨트롤클릭이 막혀서 어쩔수없이 이런 번거로운 방법으로 특정좌표 클릭을하고 있는데 다른방법이 있을지요.. 1년전만해도 완전히 아무것도 몰랐는데 비활성도 도전해보는 제자신이 신기하네요!  


f1::시작


coordmode, pixel, screen

wingetpos, pos_x, pos_y, width, height, BlueStacks App Player

x_right := width + pos_x

y_bottom := height + pos_y 


ImageSearch, FoundX, FoundY, %pos_x%, %pos_y%, %x_right%, %y_bottom%, *50 구입.png

if (ErrorLevel = 0) {

sleep,1000

비활성왼쪽클릭(FoundX, FoundY) ;찾은 좌표를 클릭합니다.

ImageSearch ,FoundX, FoundY, %pos_x%, %pos_y%, %x_right%, %y_bottom%, *50 옥수수.png

if (ErrorLevel = 1) {

sleep,2000

lparam2 := 421|434<<16

PostMessage, 0x201, 1, %lparam2%, , BlueStacks App Player  ;설치자리

PostMessage, 0x202, 0, %lparam2%, , BlueStacks App Player

sleep,2000

lparam3 := 399|301<<16

PostMessage, 0x201, 1, %lparam3%, , BlueStacks App Player   ;설치확인닫기

PostMessage, 0x202, 0, %lparam3%, , BlueStacks App Player     ;

sleep,3000

비활성왼쪽클릭(FoundX, FoundY) ;찾은 좌표를 클릭합니다.

}

비활성왼쪽클릭(x좌표, y좌표)

{

wingetpos, w_x, w_y, w_w, w_h, BlueStacks App Player

내부좌표x := x좌표 - w_x

내부좌표y := y좌표 - w_y

lparam := 내부좌표x|내부좌표y<<16

PostMessage, 0x201, 1, %lparam%, , BlueStacks App Player

PostMessage, 0x202, 0, %lparam%, , BlueStacks App Player

sleep, 1000 

}


return



  • profile
    블루아 2015.11.17 10:06

    코드를 다 확인하진 않았지만 님이 특정 좌표를 찾으라고 한 코드 위에 메시지 출력문을 넣어서 거기까지 제대로 메시지가 출력이 되는지 확인해보세요. 만약 출력이 된다면 좌표값에 무엇이 들어있는지 확인해보시구요. 코드를 한줄한줄 추적해가면 문제를 발견할 수 있을거에요.

  • 소리없이 2015.11.17 10:23

    네 그것도 이미 해보았습니다 메시지 잘 나오고 분명히 특정좌표클릭도 진행이 되는것으로 나옵니다 막상 클릭만 안되고 있습니다

  • 제발등업좀2 2015.11.17 10:14

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

    검은색 테두리가 Screen

    빨간색 테두리가 Relative

    파란색 테두리가 Client

    라고 생각하시면 됩니다.


    옛날 외치기 님이 올려주신 댓글인데 퍼왔습니다.. 

    이미지 서치 해서 나온 좌표값은 스크린 좌표입니다

    클린 좌표가 아니죠;; 즉 창의 제목줄과 보더 값을 빼줘야하는게 아닐런지요?

    라고 조심스럽게 의심해봅니다.?

    왜냐면.. 포스메세지는 창의 클린 좌표를 기준으로 하므로?

    자세한건 다음고수님이~ 짠!!하고.



  • 소리없이 2015.11.17 10:30
    그존명령 다없애고 그냥

    f1::시작
    lparam2 := 421|434<<16
    PostMessage, 0x201, 1, %lparam2%, , BlueStacks App Player
    PostMessage, 0x202, 0, %lparam2%, , BlueStacks App Player

    sleep,2000

    lparam3 := 399|301<<16
    PostMessage, 0x201, 1, %lparam3%, , BlueStacks App Player
    PostMessage, 0x202, 0, %lparam3%, , BlueStacks App Player ;
    sleep,3000

    이런식으로하면 문제없이 잘 클릭은 합니다 지금 뭔가 기존에 명령들과 어디가 꼬여서 잘 안되는거 같은데 ..말씀해주신말데로라면 지금 lparam2 := 421|434<<16 에서 제목표시줄정도만큼 y로 20정도 빼라는 말씀이신가요?
  • 제발등업좀2 2015.11.17 10:34
    뭐 수치로 빼면 그렇겠죠? 기억상으로 예뮬같은 경우 x-8 y-30정도 빼줘던것같은데.. 스크린좌표일경우에요 소리님이 찍고자하는좌표가.. 여튼 그것때문에.. 제대로된죄표를 찍지않은것꺼에요
  • 제발등업좀2 2015.11.17 10:36
    또한. 이미지서치로 찾은 같은 왼쪽제일상단 입니다.. 이점역시 참고하셔야해요..
  • 제발등업좀2 2015.11.17 10:38
    소리없이 님이 찍고자하는 이미지의 중앙이 아니라.. ㅠㅠ 왼쪽제일 상단이므러.. 약간의좌표계산이 들어가야.. 중앙을 찍습니다.
  • profile
    외치기 2015.11.17 10:53
    왠지 익숙한 화면이다 했더니 제가만든거였군요 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
  • 제발등업좀2 2015.11.17 10:57
    ㅋㅋㅋㅋㅋ 도용했습니다... 참 좋은 자료라고 생각해서 ㅋㅋ 가지고있거든요 ㅋㅋ
    허락없이 도용죄송합니다 ㅋㅋ 출처는 써낳으니 양해해주세요 외치기님 ~~~ ㅋㅋ
  • profile
    외치기 2015.11.17 10:58
    좋은자료로 평가받고 이곳저곳에서 발견된다면 저에겐 큰 영광이죠.
  • 제발등업좀2 2015.11.17 11:05
    어느덧 외치기님의 그 트레이드 마크인 머핀 몬스터.. 가 무지방갑고 낫설지않게 보이기 시작합니다 ㅋㅋ 왠지 저눈이 향한곳이 저를 보는것같고 @_@ 빨려드는 느낌..!!!! 헤롱헤롱 ㅋㅋㅋ 걍웃자고하는 소리입니다 ^^ 비오는데.. 우산이없어 편의점에서 3연속 2000원짜리 우산을 사면서 댓글 남깁니다 ㅠㅠ 아나 ..
  • 소리없이 2015.11.17 11:11
    정말 감사합니다 말씀하신데로 그냥 lparam2 := 421|404<<16
    lparam2 := 421|404<<16
    PostMessage, 0x201, 1, %lparam2%, , BlueStacks App Player
    PostMessage, 0x202, 0, %lparam2%, , BlueStacks App Player
    여기서 y30뺸
    param2 := 421|374<<16 하니까 되네요 !
  • 리체 2015.11.17 10:23

    좌표에는 일반 기준으로 3가지가 있습니다. 스크린,윈도우(relative),클라이언트

    특정 좌표클릭(421,434) - 이 좌표는 무엇을 기준으로 하는 좌표입니까?


    이미지서치로 얻은 좌표는 스크린 좌표이고, 포스트메시지는 클라이언트 좌표를 사용합니다.


    비활성왼쪽클릭(x좌표, y좌표) 이 함수에서 스크린상의 윈도우 위치만 뺐으니 윈도우 좌표가 됩니다.

    당연히 정확한 클릭 포인트가 틀려질수밖에 없습니다.


    윈도우 좌표에서 보더와 캡션을 빼주면 클라이언트 좌표가 됩니다.


    보더와 캡션을 구할수 있는 명령어 : sysget 참조

    캡션-4

    보더-32


  • 제발등업좀2 2015.11.17 10:27
    역시 리체님 ^-^ ~~
  • 소리없이 2015.11.17 10:34
    허 뭔가 또 어려운 명령어가 나왔네요 ㅜ 다른분의 함수를 보고한거라 어떻게 수정해야할지 막막하네요 ㅜ
  • profile
    외치기 2015.11.17 10:58

    우선 비활성왼쪽클릭이라는 함수를 가지고계신데도 불구하고

    왜 중간에 좌표를 직접넣을때는 함수를 사용안하시는지요??


    lparam2 := 421|434<<16

    PostMessage, 0x201, 1, %lparam2%, , BlueStacks App Player  ;설치자리

    PostMessage, 0x202, 0, %lparam2%, , BlueStacks App Player


    이부분을


    비활성왼쪽클릭("421","434") 


    이렇게 사용하셔도 될듯하네요.


    그리고 이미지를 못찾았을때 조건문 안쪽으로 확실히 진입하는지 확인먼저 해보세요.

    괄호 안쪽에 메시지박스 하나정도 추가하면 될거같네요.

    진입이 정상적으로 된다면

    위에서 많은분들이 말한 좌표계가 문제입니다.

  • 소리없이 2015.11.17 11:08
    오 외치기님 안녕하세요!!! ㅋㅋ 사실 외치기님꺼 였군요 전 외치기글 보고 따라한건아닌데 ㅋㅋ 잼있네요
    정말 잘 쓰고있습니다 사실활성도 잘 못하는데 외치기님덕분에 따라만잘하면 나도 할수있겠다 싶어서 한거거든요
    정말 감사합니다. 그리고 제 2번쨰 답변도 해주셧네요 그냥 바로 비활성클릭("421","434") 이것만 넣어도 되는거였나요?신기하네요 따로 함수뭐 만들어야 하는거아닌가요? 빨리 집에 들어가서 확인해보고 싶네요!
  • profile
    외치기 2015.11.17 11:09
    함수는 이미 만들어져있으시잖아요 ㅎㅎ
    함수에 변수만 넣어서 사용해보신거같은데
    저런식으로 직접 값을 넣어서 사용할수도있답니다.
  • 소리없이 2015.11.17 11:14
    아 그러네요..빨리 가서 고치고싶네요! 정말 감사합니다 이미지서치기준에 의한 좌표였군요... 괜히 힘들게뻘짓??했던거군요 하..ㅋㅋ
  • profile
    외치기 2015.11.17 11:17
    좌표계는 한번 익숙해지시면 절대 안까먹으실거에요.
    ControlClick이나 PostMessage를 사용하기 위해서는 필수로 알아야될 사항이고요.
  • 소리없이 2015.11.17 14:04
    해봤는데 안되는군요 ㅜ 뭐가 문제일까요 상태만보면 함수로 넘어가는거까지는 확인이 되는데 클릭이 안되고있습니다 테스트용으로 만든것도 안되고 있습니다

    f1::

    비활성왼쪽클릭("115","466")
    sleep,1000
    비활성왼쪽클릭("115","496")



    비활성왼쪽클릭(x좌표, y좌표)
    {
    wingetpos, w_x, w_y, w_w, w_h, BlueStacks App Player
    내부좌표x := x좌표 - w_x
    내부좌표y := y좌표 - w_y
    lparam := 내부좌표x|내부좌표y<<16
    PostMessage, 0x201, 1, %lparam%, , BlueStacks App Player
    PostMessage, 0x202, 0, %lparam%, , BlueStacks App Player
    sleep, 1000 ;ms 단위입니다.
    }
    return
  • profile
    외치기 2015.11.17 14:24
    함수야 당연히 되겠죠.
    제가 말씀드린건 IF Errorlevel 안쪽으로 들어오느냐 입니다.
  • profile
    외치기 2015.11.17 14:25
    if (ErrorLevel = 1) {
    Msgbox 진입
    }
  • 제발등업좀2 2015.11.17 14:28
    비활성왼쪽클릭(115,496)



    비활성왼쪽클릭(x좌표, y좌표)
    {
    내부좌표x := x좌표 - 8
    내부좌표y := y좌표 - 30
    lparam := 내부좌표x|내부좌표y<<16
    PostMessage, 0x201, 1, %lparam%, , BlueStacks App Player
    PostMessage, 0x202, 0, %lparam%, , BlueStacks App Player
    sleep, 1000 ;ms 단위입니다.
    }
    return
    위에 스크립트는 .. 이미지서치시 클릭할때 만쓰셔야죠?

    그냥 클릭 할땐 이렇게 쓰셔야할듯한데요 ..

    아까도 말씀드려지만.. 이미지서치는 스크린좌표..!!!!
    포스메세지 는 클린 좌표!!!입니다.. 이미지서치 한값을 클릭할때와.. 그냥 클릭할때와는 엄연히.. 차이가있습니다.
  • 소리없이 2015.11.17 14:47
    에고 무슨말인지 이제야 이해했습니다..;; 언제부턴가 머리가 심하게 아둔해졌네요.. 여럿고수님들을 힘들게 귀찮게 하였을정도니.. 정말 감사합니다 이번걸로 많을걸 알게되었습니다
  • 제발등업좀2 2015.11.17 15:18
    저도 ㅠㅠ 애딸린 학부형인지라 머리가 잘안딸아주지만... 하시다보면 이해되실꺼에요 .. 외치기님 께서 말씀드렷지만 ..포스메세지 를 쓰실려면 .. 어느정도 는 아셔야해요.. ^_^ 도움이 되어다니 기뿌네요.
  • profile
    블루아 2015.11.17 14:33

    여러 고수님들 등장하셨네요;;


List of Articles
분류 제목 글쓴이 최근변경 추천
질문 Gdip_BitmapFromHWND 함수 사용시 질문드립니다. 1 알프리 2015.11.18 0/0
질문 대체 어디가 잘못된 걸까요.. 고수님들 알려주세요 27 소리없이 2015.11.17 0/0
질문 [질문] Settimer 사용시 일시정지 기능 5 마토깽 2015.11.19 0/0
질문 특정 이미지 발견시 폰으로 알림메세지를 보내고 싶은... 1 xmen 2015.11.16 0/0
질문 함수 사용 질문입니다 ( 드랍다운리스트와 비활성 클릭) 1 몬길러축협 2015.11.16 0/0
질문 데이터를 저장한뒤 불러와서 비교하려는데 2 KnKn 2015.11.16 0/0
질문 블루 스택 창이 최소화 되면 다시 원상태로 돌리기 방... 1 인디비쥬얼 2015.11.17 0/0
질문 오토핫키 간단한거 질문해용 ㅠㅠ 2 망나뇨옹 2015.11.16 0/0
질문 imagesearch 에 관해서 질문합니다. 4 N4N2 2015.11.16 0/0
자유 흠 gdip 안쓰고도 비활성 이미지 서치가 가능하네요 4 루뽕 2015.11.19 0/0
질문 이미지 서치 질문드립니다. 5 망나뇨옹 2015.11.15 0/0
질문 사이퍼즈하는데 핫키가 잡히네요 고파사탕 2015.11.14 0/0
질문 명령어 질문 하나만 하겠습니다.ㅎㅎ 5 genie7 2016.01.14 0/0
질문 외치기님 질문드려요.Gdip_ImageSearchWithHwnd 18 강군s 2016.03.23 0/0
질문 같은 이름의 여러개의 창 컨트롤. 4 김댕 2016.04.18 0/0
질문 비활성 esc 명령어 아시는 고수분 있나요?ㅎㅎ 5 genie7 2015.11.13 0/0
질문 이미지 서치에서 trans가 잘안되서 질문드립니다. 2 랑아 2015.11.13 0/0
질문 질문 드립니다. 자료형?? 1 알프리 2015.11.13 0/0
질문 외치기님 강좌요청합니다 11 러비 2016.08.16 0/0
질문 또다시 질문드립니다.. 팅김확인 관련만들때 24 제발등업좀2 2015.11.12 0/0
Board Pagination Prev 1 ... 138139140141142143144145146 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글