방개
비밀번호를 잊어버리셨나요?

질문

아래 질문에 재차 문의 드립니다. (코드첨부)

    • 글자 크기

프날님 말씀듣고 코드를 공부하며 이것저것 수정해봐도 여전히 멈춤현상이 발생하네요.

매크로가 꺼지는게 아니고, 잠시 일시정지(?) 되어있는상태에서 제가 마우스 클릭하면 다시 매크로가 돌아가네요 ;; 죄송하지만 한번 코드 봐주실수 있으실까요?

 

;프로그램은 항상 관리자권한으로 실행한다.

coordmode, mouse, screen
coordmode, pixel, screen
SetDefaultMouseSpeed 0


F1::
Loop
{
 PixelGetColor, stock_a, 1580,153, rgb
 if (stock_a=0xffe4e1)
 {
  MouseClick, left, 1580, 153
  sleep 1300
  mouseclick, left, 1203, 38
  sleep 500
  send ^c
  mouseclick, left, 3390, 165
  send ^v
  send {enter}
  sleep 1000
  
  MouseClickDrag, right, 1500, 150, 1600, 150
  send ^c

  mouseclickdrag, left, 2484,157,2066,157 
  send ^v
  send {enter}
  sleep 1000
  
  imagesearch, bx, by, 2050,305,2116,436, 최신.png
   if errorlevel=0
   {
    mouseclick, left, bx+10, by+10
    sleep 300
   }
   if errorlevel=1
   {
   }
   
  search_count:=0
  loop 11 
  {
   ImageSearch, cx, cy, 1950,350,2550,870, %search_count%.png
    if errorlevel=0
    {
     del_count:=100
     del_exist:=0
     
     loop 39 
     {
      ImageSearch, del_x, del_y, 1950, cy-40, 2550, cy+40, %del_count%.png
       if errorlevel=0
       {
        del_exist:=del_exist+1
       }
       if errorlevel=1
       {
       }
      del_count:=del_count+1
     }
     
     if (del_exist=0)
     {
      PixelSearch, dx, dy, cx-50, cy-20, cx+10, cy+20, 0xab0d1a,,fast
       if errorlevel=0
       {
        MouseClick, Right, dx, dy
        sleep 300
        send e
        mouseclick, left, 350,970
        send ^v
        sleep 200
        send {enter}
        sleep 300
       } 
       
       if errorlevel=1
       {
       }
     }
     
     ImageSearch, ex, ey, 1950,cy+30,2550,870, %search_count%.png
      if errorlevel=0
      {
       del_count:=100
       del_exist:=0
       
       loop 39
       {
        ImageSearch, del_x, del_y, 1950, ey-40, 2550, ey+40, %del_count%.png
         if errorlevel=0
         {
          del_exist:=del_exist+1
         }
         if errorlevel=1
         {
         }
        del_count:=del_count+1
       }
       
       if (del_exist=0)
       {
        PixelSearch, fx, fy, ex-50, ey-20, ex+10, ey+20, 0xab0d1a,,fast
         if errorlevel=0
         {
          MouseClick, Right, fx, fy
          sleep 300
          send e
          mouseclick, left, 350,970
          send ^v
          sleep 200
          send {enter}
          sleep 300
         } 
         if errorlevel=1
         {
         }
       }
      }
      if errorlevel=1
      {
      }
    }
    if errorlevel=1
    {
    }
   search_count:=search_count+1
  }
 }
 else ;제일처음 종목찾기 if에 대한 else 문이다
 {
 }

}
return

f2::Pause
f3::ExitApp

    • 글자 크기
댓글 4
  • 2020.3.27 17:15 댓글

    잘 작동하던 스크립트가 "진행이 멈추는"일은 없습니다. (킴퓨터에 부하가 심하게 걸리면 그럴 수도 있지만요. → 이런 경우는 보통 멈춰있다 꺼집니다 자동으로)

    올리신 스크립트에서 PixelSearch나 ImageSearch를 정상적으로 진행하는지를 봐야합니다. 색상 또는 이미지를 못 찾는 거일수도 있잖아요? (그러니까, 해당 클릭 및 이미지서치를 하는 프로그램이 활성화되어있지 않았더니 찾지 못하거나 그런 경우 말입니다.)

     

    1. Sleep 구문이 사이사이에 없습니다. Loop를 안에 Sleep없이 Search류 구문을 써주시는 부분이 많습니다. 분명 부하가 크게 걸리는 작업입니다.

     

    2. "일시정지한다"라고 표현하셨을 때, 정말로 일시정지 되었을 가능성은 극히 낮습니다. 실제로는 ImageSearch를 못해서 의미없는 Loop만 계속 돌고있거나, 이미지를 찾아도 마우스 이동이 일어나지 않다던가 하는 경우가 많습니다. (모두 "일시정지한다"라고 생각될 수 있는 모습 아니겠습니까?)

     

    3. Tooltip이라도 주기적으로 띄워서 현재 스크립트가 어떻게 진행되고 있는지 파악하시고, 동작이 되지 않을 때 ToolTip이 어떤 상태인지 확인해보세요. 즉, Tooltip을 Loop안에 넣어두시고 Tooltip의 내용을 A_index로 해놓는 식으로, 반복문은 계속 도는것인지 확인해 복 필요가 있습니다.

     

    4. MouseClick 등의 명령어는 "다른 프로그램에" 작용하는 명령어입니다. 해당 프로그램이 오토핫키를 사용한다는 가정을 하고 만들었을까요? 아마 아닐겁니다. 그러면 오토핫키에서의 정상적인 구문도 100% 정상동작일 보인다는 보장은 없습니다. (대부분의 경우에선 동작할 수 있지만요.) 즉, 해당 프로그램이 오토핫키의 동작을 방해하고있을 수 있습니다. 이는 고의적으로 막은것 뿐만 아니라 '오토핫키 사용을 고려하지 않은'것을 말씀드리는 것이며, 그렇기 때문에 의도치 않게 동작이 될 수 있다는 뜻입니다.

     

    5. ahk파일 실행 후 동작이 안된다 싶을 때, 작업 표시줄 오토핫키 스크립트 Trayicon을 더블클릭 해보세요. 현재 어느 줄까지 진행했는지 로그가 남아있습니다. (F5를 누를때마다 갱신됩니다.)

    이를 확인해보시는것도 좋은 방법입니다.

     

    코드상 문제는 안보이고요(물론 효율성이나 부하의 문제는 있지만요) 이론상 정상 작동이 되는 코드입니다.

    저번 글에도 말씀드렸다싶이, "일시정지돼요"라는말씀은 너무 추상적인 말씀임을 알려드립니다.. 정확한 증상을 파악하시는게 급선무입니다.

  • 2020.3.27 17:26 댓글

    여담으로.. 공지사항 확인하시어 '코드스니펫' 플러그인 이용하여 코드 삽입 부탁드립니다.

  • 프날님께
    록디글쓴이
    2020.3.27 17:53 댓글

    답변 감사합니다.

    1. Sleep 구문이 사이사이에 없습니다. Loop를 안에 Sleep없이 Search류 구문을 써주시는 부분이 많습니다. 분명 부하가 크게 걸리는 작업입니다.

    여기에서 search 이후 sleep 구문을 사용해야 부하가 덜 걸리나요?? 어느부분에 써줘야 부하감 덜할지 궁금합니다.

  • 록디님께
    2020.3.27 18:31 댓글

    쓰신 코드 한 줄씩 순서대로 읽어보시면.. 아래와 같은 구문이 많습니다. (꼭 완전 똑같은 구문이 아닌, 아래와 같은 구조를 말씀드리는겁니다.)

    loop 39 
    {
        ImageSearch, del_x, del_y, 1950, cy-40, 2550, cy+40, %del_count%.png
        if errorlevel=0
        {
            del_exist:=del_exist+1
        }
        if errorlevel=1
        {
        }
        del_count:=del_count+1
    }

    물론... if문을 전통식으로 괄호없이 써준 점이랑.. ErrorLevel이 1일때 행동이 없는데 굳이 써주신 부분은 가독성에 해가 되는 부분이지만 논외로 하고요

    39회 반복할동안.. 해당 구문에 Sleep이 없습니다.

    컴퓨터는 가능한 한 빠르게 ImageSearch를 39회 진행하겠지요. 서치와 다음 서치 사이에 간격을 조금 주셔서, 컴퓨터가 쉬는 시간을 가질 수 있게 해달라는 뜻입니다. (저는 보통 300ms정도 주긴 하는데, 더 적어도 됩니다. 100ms만 주셔두 되고요. 0.1초나 0.3초나 눈 깜빡할 새이니까요.)

댓글 달기

서버에 요청 중입니다. 잠시만 기다려 주십시오...