매크로

조회 수 490 추천 0 댓글 4

F2::
{
 매크로시작:= true

 while(매크로시작= true)
 {
  CoordMode, Pixel, Screen
  WinGetPos, pos_x, pos_y, width, height, test
  x_right := width + pos_x
  y_bottom := height + pos_y
  
  Imagesearch, FoundX, FoundY, %pos_x%, %pos_y%, %x_right%, %y_bottom%, *100 C:\Image\1.bmp
  if (ErrorLevel = 0)
  {
   msgbox,1인식완료
   내부좌표클릭(FoundX, FoundY)
   Sleep, 1000
  }
  Imagesearch, FoundX, FoundY, %pos_x%, %pos_y%, %x_right%, %y_bottom%, *100 C:\Image\2.bmp
  if (ErrorLevel = 0)
  {
   msgbox,2인식완료
   내부좌표클릭(FoundX, FoundY)
   Sleep, 1000
  }

 }
}
return


내부좌표클릭(xx, yy)
{
 CoordMode, Pixel, Screen
 WinGetPos, w_x, w_y, w_w, w_h, test
 
 내부좌표x:= xx - w_x
 내부좌표y:= yy - w_y
 
 Iparam := 내부좌표x|내부좌표y<<16
 PostMessage, 0x201, 1, %Iparam%, DirectUIHWND3, test
 Postmessage, 0x202, 0, %Iparam%, DirectUIHWND3, test
 Sleep, 1000
}


F3::
{
 매크로시작:= false
}
return


---------------------------------------------



"test"는 test폴더이고, 그 안에 각각 두개의 아이콘이 있으며(각각의 캡쳐본은 1.bmp / 2.bmp), 클릭을 번갈아가면서 하는 스크립트를 짜봤습니다.


기대완 달리 비활성화 상태에서 이미지 인식까지는 잘 되는 것 같은데(메시지박스 정상적으로 출력), 그 뒤로 클릭은 되지 않네요.


window spy 프로그램을 이용해 test폴더의 control 값(Class NN)도 찾아서 지정해줬는데도 영 먹통이네요.


이미지서칭이 잘 된거보면 내부좌표클릭 함수 부분에서 문제가 있는 것 같은데 아무리 들여다봐도 모르겠습니다.


어느 부분이 문제인지 알 수 있을까요?


  • 리체 2016.01.02 10:59

    좌표는 스크린,윈도우,클라이언트 3가지가 있습니다.

    이미지서치에 스크린을 이용하였고, 클릭함수에서 윈도우의 위치를 빼셨으니 윈도우 좌표가 되었습니다.

    그러나, 포스트메시지는 클라이언트 좌표를 사용합니다.

    윈도우좌표에서 테두리(보더), 창제목(캡션)을 빼줘야 클라이언트 좌표가 됩니다.

    sysget, cap, 4 ;제목

    sysget, bor, 32 ;테두리


    클래스를 지정한다면 또다른 문제가 제기됩니다.

    클래스가 윈도우안에 포함되어 좌표가 계산되어진다면 상관없지만

    유틸이 클래스를 별도로 운영해서 동작되어질 경우,

    해당 클래스의 좌표는 윈도우와 상관없이 별도의 영역으로 인식하고 좌표를 주어야 합니다.

    또한, 오동작을 막기위해 클래스가 활성이 되어야만 동작되는 것도 있습니다.


    포스트메시지로 클릭이 안된다면 controlclick 으로 시도해 보세요.

  • 이그쨔 2016.01.02 11:13

    답변 감사합니다.

    그럼 저 부분에서 윈도우좌표를 쓰지 않고, 이미지서치에서 나온 좌표 FoundX, FoundY를 직접 postmessage의 좌표값에 16진수로 입력하면 작동되야하지 않나요?

    while(매크로시작= true)
    {
    CoordMode, Pixel, Screen

    WinGetPos, pos_x, pos_y, width, height, test
    x_right := width + pos_x
    y_bottom := height + pos_y

    Imagesearch, FoundX, FoundY, %pos_x%, %pos_y%, %x_right%, %y_bottom%, *100 C:\Image\1.bmp
    if (ErrorLevel = 0)
    {
    msgbox,%FoundX%=%FoundY%
    Postmessage, 0x201, 1, %FoundX%|%FoundY%<<16, DirectUIHWND3, test
    Postmessage, 0x202, 0, %FoundX%|%FoundY%<<16, DirectUIHWND3, test

    Sleep, 1000
    }


    메시지박스로 뜨는 좌표도 확인해봤고, 직접 window spy로도 해당 이미지좌표가 맞는지 확인도 해봤는데
    좌표는 옳게 뜨지만 해당 좌표를 클릭하지 않네요.

    최종 활용은 블루스택에서 쓸 거라 테스트와는 달리 클래스를 지정해주지 않아도 될 것 같은데,
    controlclick은 sleep지정을 충분히 해줘도 클릭을 할때가 있고 안할때가 있더라고요.

  • 슉슉이 2016.01.02 17:45

    포스트메시지 창지정이 잘못된 것 같네요.


     PostMessage, 0x201, 1, %Iparam%,, ahk_class 클레스명 or  PostMessage, 0x201, 1, %Iparam%,, 작업관리자에 표시되거나 프로그램 창에 나온 텍스트

  • 슉슉이 2016.01.02 17:48
    블텍에 쓸 거면 클릭함수에서

    CoordMode, Pixel, Screen
     WinGetPos, w_x, w_y, w_w, w_h, test
    이 두 줄 삭제하고

    내부좌표 따로 구할 필요없이 Relative좌표 바로 입력하시면 됩니다.

List of Articles
분류 제목 글쓴이 최근변경 추천
자유 블루스택과 녹스에서 히트 돌릴때 색상차이 8 와이로 2017.11.09 4/0
정보 간단한 방법으로 길오아 오토핫키를 만들어보세요^^ 21 럭셔리형아 2018.02.07 4/0
정보 MS오피스 스타일 GUI 프로토타입 6 예지력1 2016.04.16 4/0
질문 오토핫키 에디터 제작. 9 프리헌터스 2015.09.11 4/0
정보 테일스타 내 포인트 조회기 16 와이로 2017.07.04 4/0
정보 팝업 알림, CleanNotify 3 예지력1 2015.11.11 4/0
정보 브레이브 헌터 ... 매크로.. 1 제발등업좀2 2015.07.10 4/0
자유 비활성이미지서치 중간정리(disp,adb) 11 우후훅 2017.04.03 4/0
정보 블루스택 해상도 변경하기... 10 로뎀나무 2015.04.15 4/0
자유 [AutoPM Ver 1.58] 포켓메이플스토리 매크로 8 은다 2015.04.25 4/0
정보 초보가 초보에게;; 핫키 사용법 8 악동주성 2016.09.03 4/0
질문 매크로좀 오랜만에 다시보고자 접속을... 7 joeypre 2021.09.27 3/0
자유 오랜만에 글남깁니다 ㅋ. 매우많이.. 늦었지만 복들 ... 3 제발등업좀2 2016.01.10 3/0
정보 앱아이콘 터치없이 adb로 앱 실행 시키는 방법 18 와이로 2021.01.23 3/0
정보 오토핫키를 간단히 쓰고싶지만 너무 어렵다고 느낄때 9 HyunsD 2018.02.07 3/0
정보 제가 쓰는 픽셀피커입니다(스크립트) 6 와이로 2017.02.11 3/0
정보 지니모션 디바이스(타이틀) 검색 ddl 소스 9 핸콕 2015.10.11 3/0
질문 텍스트를 가져오고 싶습니다. 6 _Crash 2022.12.14 3/0
정보 INI 를 쉽게 사용해봅시다. 11 모바게 2017.11.01 3/0
정보 DynaScript - Child 프로세스로 코드 실행 13 예지력1 2019.07.16 3/0
Board Pagination Prev 1 2345678910 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글