매크로

조회 수 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
분류 제목 글쓴이 최근변경 추천
질문 오토핫키 파일인스톨 명령어 질문이요 3 페르니코 2016.01.12 0/0
질문 비활성 스크린 가져오기 gdip말고 다른거없나요? 9 cjh71 2016.01.13 1/0
질문 특정 구문에 대해 궁금합니다. x :=(a ? 1 : 100) 세상에이런놈 2016.01.14 0/0
질문 Postmessage관련 질문 Param값 printscreen키 존재하나요? 허럴럴렁 2016.01.11 0/0
질문 2개의 구이창에서 2번 구이창 리스트뷰에 메세지가 나... 아처 2016.01.11 0/0
자유 오토핫키 OpenGL 라이브러리 4 암드래 2016.01.12 2/0
질문 GetkeyState 키를 여러개 지정하는법 질문! 7 Jaram 2016.01.12 0/0
질문 엑셀 다루기 관련 질문 드립니다 ^_^ 4 제발등업좀2 2016.01.10 0/0
자유 오랜만에 글남깁니다 ㅋ. 매우많이.. 늦었지만 복들 ... 3 제발등업좀2 2016.01.10 3/0
질문 도움이 필요합니다..OTL 5 이응이 2016.02.16 0/0
질문 두개의 loop문 사이를 왔다갔다할수있는 핫키 12 Jaram 2018.10.12 0/0
질문 gui 부분 질문 드립니다 2 247천사잉 2016.01.10 0/0
질문 d-day 기능 궁금해서 질문합니다~ 2 MaumR 2016.01.09 0/0
질문 Postmessage가 IE에서는 안되네요 1 김댕 2016.01.08 0/0
질문 인스타그램 좋아요 찍기 만들려는데 문의입니다. 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
Board Pagination Prev 1 ... 130131132133134135136137138 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글