오토핫키 강좌 #3 - WinGetPos 활용 (특정 영역에서만 이미지 찾기)




안녕하세요~ 킴영감입니다.


오토핫키 붙여넣기 3번째 강좌입니다.


매크로 만들기에 이어서 필요한 내용들을 먼저 알려드리려고 생각하는데 초보단계에서 사용할 수 있는 내용이 고갈되어 가네요...ㅠ


다르게 말하면 앞 강좌까지 다 이해하신분은 초보는 벗어난 것이겠죠??^^


오늘은 비활성 매크로를 만들 때에 유용하게 사용할 수 있는 WinGetPos의 활용방법에 대해 알아보려고 합니다.


그럼 강좌를 시작하겠습니다.



1. WinGetPos란?


오토핫키의 명령어들은 거의 대부분이 의미를 담고 있습니다.


WinGetPos 역시 단어 그대로 이해하면 윈도우의 위치(Position)를 얻을 수 있는 명령어입니다.


2. WinGetPos 사용법


WinGetPos는 아래와 같이 사용할 수 있습니다.


 WinGetPos, x좌표를 저장할 변수, y좌표를 저장할 변수, 윈도우 넓이를 저장할 변수, 윈도우 높이를 저장할 변수, 윈도우 타이틀 


사용법은 다른 함수들과 비슷합니다.


"WinGetPos"는 항상 그대로 적으시고, "변수"에 해당하는 부분은 각각의 값을 넣어줄 변수이름을 적어주시면 됩니다. 여기서 x좌표와 y좌표는 프로그램의 왼쪽 제일 위의 좌표를 의미합니다.


윈도우 타이틀 부분에는 좌표를 알고 싶은 윈도우의 이름을 적어주시면 됩니다. 여기서 중요한 것은 반드시 작업관리자를 열어서 "응용 프로그램" 탭에 있는 이름으로 적어주셔야 한다는 것입니다. (띄워쓰기까지 똑같이 적어주셔야 합니다.)


사용 예는 아래와 같습니다.


 WinGetPos, FoundX, FoundY, Width, Height, BlueStacks App Player 


WinGetPos의 경우 윈도우 타이틀 뒤에 옵션이 더 있지만 필요하지 않은 부분이라 넘어가겠습니다.


3. WinGetPos 활용


이전 강좌까지 ImageSearch명령어를 사용해서 이미지를 찾을 때에 전체화면에서 찾았습니다. 스크립트가 복잡하지 않을 때에는 상관 없지만 찾아야되는 이미지가 많아지고 복잡해 지게되면 프로그램의 동작이 느려질 수 있습니다. 하지만 작은 영역을 지정해서 찾아준다면 좀더 빠르게 이미지를 찾을 수 있습니다. 또한 나중에 비활성 매크로를 만들 때 창의 위치가 반드시 필요하기 때문에 알아놓으시면 좋을 것입니다.




그럼 바로 실습을 해 보도록 하겠습니다.


오늘은 기초강좌 5강에서 작성한 스크립트를 이용하겠습니다.


아래와 같이 스크립트를 수정하세요.


오토핫키 wingetpos


빨간 박스로 표시한 부분이 수정한 부분입니다.


먼저 원할한 테스트를 위해 CoordMode를 Screen으로 변경해 줍니다.


두번째 빨간 박스에 있는 부분이 오늘 배운 WinGetPos입니다. 


우선 WinGetPos를 Loop 내부에 적은 이유는, 만약 Loop 외부에 있게되면 매크로를 실행시키고 나서 창을 옮길 경우에 옮기기 이전의 좌표만 가지고 있기 때문에 더이상 이미지를 찾을 수 없게 됩니다. 루프를 돌때마다 윈도우의 위치를 확인함으로써 프로그램 실행 중간에 창을 옮겨도 이미지를 올바르게 찾을 수 있게 하기 위해서 Loop내부에 넣은 것입니다.


x좌표, y좌표, 넓이, 높이를 저장할 변수를 각각 "pos_x", "pos_y", "Width", "Height"로 정했습니다. 마지막에 Image는 이미지가 있는 폴더 이름입니다. 폴더 내부에 있는 아이콘을 찾아서 클릭하는 프로그램이기 때문에 폴더 이름을 적은 것이며 작업표시줄에 표시된 폴더 이름을 그대로 적었습니다. 각자 실습할 때에는 블루스택과 같이 이미지를 찾아서 클릭할 프로그램의 이름을 적으시면 됩니다.


아래에 있는 "x_right"와 "x_buttom"은 프로그램의 오른쪽 끝의 가장아래에 있는 x와 y 좌표를 의미합니다. 


이제 ImageSearch에 사용할 준비를 마쳤습니다.


아래에 빨간 박스를 보시면 이미지를 찾을 좌표들을 적는 곳에 우리가 위에서 WinGetPos명령어를 사용해서 얻은 좌표들이 적혀있는 것을 볼 수 있습니다. 이처럼 프로그램의 좌표를 얻어 이미지를 찾을 영역을 적어줌으로써 작은 영역에서 이미지를 찾을 수 있습니다. (변수를 명령어에서 바로 사용할 수 있는 방법인 %변수%를 사용했으며 붙여넣기 1강을 보시면 설명되어 있습니다.)



오늘은 WinGetPos의 사용방법과 활용방법에 대해서 알아봤습니다.


윈도우의 좌표는 경우에 따라 아주 유용하게 사용할 수 있습니다.


오늘 강좌 역시 반드시 복습하시고 각자의 경우에 맞게 실습 해 보시기를 바라며


세번째 강좌를 마칩니다.


블로그 이미지

킴영감

프로그래밍과 게임공략, 게임과 관련된 프로그램에 대한 내용을 다룹니다.

댓글을 달아 주세요

  • 궁금 2015.08.21 11:29  댓글주소  수정/삭제  댓글쓰기

    두번째 빨간색박스에서

    WinGetPos, pos_x, pos_y, width, height, image
    x_right := width + Pos_x
    x_bottom := height + Pos_y

    라고 적혀있는데

    wingetpos 에서는 x좌표저장변수,y좌표저장변수, 윈도우넓이저장변수, 윈도우높이저장변수, 윈도우 타이틀을 적으라 하셨는데 빨간박스에서는 image 만 적혀있어서 ..

    그리고 밑에 글보면 실습할땐 블루스택과 같이 이미지를 찾아서 클릭할 프로그램의 이름을 적으시면 된다고했는데 wingetpos, pos_x,pos_y, width, height, image, bluestacks app player 라고 적으라는건가요 @_@?

    • 킴영감 2015.08.21 11:46 신고  댓글주소  수정/삭제

      제가 조금 애매하게 적었네요...ㅠㅠ
      Image는 클릭을 수행할 창이름 입니다^^ 블루스텍에서 사용하시려면 Image 대신에 BlueStacks App Player라고 적으시면됩니다^^

  • rkdals128 2016.01.29 15:28  댓글주소  수정/삭제  댓글쓰기

    윈도우 넓이를 저장할변수와 윈도우 높이를 저장할 변수에

    윈도우 타이틀의 넓이와 높이를 적는건가요? Width와 Height를 적는건가요?

  • ddd 2018.12.11 03:18  댓글주소  수정/삭제  댓글쓰기

    글만 봐서는 wingetpos는 좌표만 얻어올수 있지 이미지서치를 비활성적용된다고 보기는 어려운데요, 윈도우에서 사용해도 윈도우에서 찾고자 하는 이미지가 다른 창에 의해 가려져도 사용할 수 있도록 하려면 어떻게 해야하나요??

    • 킴영감 2018.12.11 11:38 신고  댓글주소  수정/삭제

      WinGetPos는 활성이미지서치 +비활성입력 조합을 사용할 때 활용이 됩니다.
      EKMLib 카테고리 가시보면 비활성 관련 내용있구요. 자세한 내용은 유튜브가시면 있습니다.^^