오토핫키 커뮤니티

조회 수 498 추천 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
분류 제목 글쓴이 최근변경 추천
질문 인스타그램 좋아요 찍기 만들려는데 문의입니다. 1 난사자당 2016.09.04 0/0
질문 간단한 녹스 2개실행하여 오토핫키 질문 6 다중이 2016.01.08 0/0
자유 특정 프로그램에서 blockinput 명령어가 안먹혀요 ddfa4 2016.01.06 0/0
질문 체력감지 질문이요 5 현이내 2016.01.10 0/0
질문 오토핫키 스크린샷(캡쳐, 스샷)이 가능한가요? 4 김댕 2022.03.20 0/0
질문 이미지 서치 관련 + 비활 클릭 1 수지가좋아 2016.01.02 0/0
질문 PostMessage를 이용한 비활성화 이미지서칭->클릭 질문 4 이그쨔 2016.01.02 0/0
질문 이미지 비활성 서치관련 질문드립니다.! MOM131 2016.01.01 0/0
질문 메트릭스(행렬)도 가능한가요? 3 비홀더 2016.01.09 0/0
질문 피아노타일 같은건 어떻게 제작해야되죠? 3 망망몽몽 2016.01.02 0/0
질문 왕초짜 adb 왕 초급 질문 6 환타지조아 2016.01.01 0/0
질문 나누기 나머지값 구하는 연산자는 없나요? 4 비홀더 2015.12.31 0/0
질문 클릭 좌표를 기억해서 일정 조건 수립후 기억한 좌표를... 2 genie7 2015.12.26 0/0
질문 초보입니다, 웹페이지에서 어떤 텍스트를 검색하려면 3 삭제기호 2015.12.25 1/0
질문 예지력님의 자식 스레드사용중에 궁금한점...!! 2 제발등업좀2 2015.12.24 0/0
질문 PostMessage ClassNN질문 3 fnwj 2015.12.22 0/0
질문 야심한 시각에 답답한마음에 질문 하나 남겨봅니다ㅜ 1 HyunsD 2015.12.22 0/0
질문 녹스, 비활성 이미지 서칭이 안됩니다. 1 찬늘 2015.12.23 0/0
자유 크롬 원격 액서스 계속하기 눌러주는것 만들어 주실 고... 1 Auto영웅 2015.12.21 0/0
정보 앱아이콘 터치없이 adb로 앱 실행 시키는 방법 18 와이로 2021.01.23 3/0
Board Pagination Prev 1 ... 131132133134135136137138139 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글