프날 오토핫키 강좌  v2

⚠ 이 강좌는 오토핫키 v2를 다룹니다

지금 보시는 강좌는 널리 알려진 오토핫키(v1.1)의 차세대 버전인 오토핫키 v2를 다루고 있습니다.
이전 오토핫키 버전과는 많은 부분에서 호환이 되지 않으니, 만약 현시점에서 대중적인 '오토핫키 v1.1'의 강좌를 찾으신다면 프날 오토핫키 강좌(https://pnal.kr)를 봐주시길 바랍니다.

42. PixelSearch (픽셀 서치)


ImageSearch는 화면 내의 화상을 찾고, 그 위치를 변수에 담아주는 함수였습니다. 비슷하게, 화면 내에서 원하는 화소의 위치를 찾는 함수인 PixelSearch를 배워보도록 하겠습니다.

PixelSearch

PixelSearch 함수는 특정 색상을 가진 화소를 찾고, 찾았다면 그 위치를 변수에 담아주는 함수입니다.

화상을 구성하는 여러 화소 중 특정 색상을 찾아 '색이 존재함. 위치:5, 1' 이라고 적은 모습 사진 1. PixelSearch 함수의 동작

ImageSearch와 유사하지만, 찾는 대상이 '화상'이 아니라 '화소'가 되었습니다. 따라서, 원형 또한 굉장히 유사한 모습을 볼 수 있습니다.

PixelSearch(&OutputVarX, &OutputVarY, X1, Y1, X2, Y2, ColorID [, Variation])
PixelSearch 함수의 원형

매개변수

  • &OutputVarX: 찾은 화소의 x 좌표가 담길 변수의 참조
  • &OutputVarY: 찾은 화소의 y 좌표가 담길 변수의 참조
  • X1: 화소를 찾을 사각 영역의 좌상단 꼭짓점 x좌표
  • Y1: 화소를 찾을 사각 영역의 좌상단 꼭짓점 y좌표
  • X2: 화소를 찾을 사각 영역의 우하단 꼭짓점 x좌표
  • Y2: 화소를 찾을 사각 영역의 우하단 꼭짓점 y좌표
  • ImageFile: 찾을 화소의 색상 값
  • Variation: 색상 음영 오차 허용도

반환 값

  • 1 (true): 화소를 정상적으로 찾았을 때
  • 0 (false): 화소를 찾지 못했을 때

각각의 매개변수를 세부적으로 알아보면 아래와 같습니다.

1. &OutputVarX, &OutputVarY

범위 내에서 화소를 찾았을 경우, 찾은 화소의 좌표가 담기는 변수를 참조로 적어줍니다. MouseGetPosImageSearch에서와 마찬가지로, '참조로 적는다'라고 하면 '값이 담길 변수 앞에 & 기호를 붙여서 적는다'는 뜻입니다. 그 원리는 나중에 설명드리기로 했습니다.

2. X1, Y1, X2, Y2

화소를 찾을 영역을 지정해줍니다. 역시 ImageSearch와 같습니다. 좌표 유형도 마찬가지로 '클라이언트 좌표'를 기본 사용하며, CoordMode("Pixel", 유형)으로 사용할 좌표 유형을 지정할 수 있다고 했습니다.

3. ColorID

범위 내에서 찾을 화소의 색상 값을 적어줍니다. 색상 값은 좌표를 알아올 때와 마찬가지로 Window Spy로 알아낼 수 있는데, 아래와 같이 현재 마우스 커서가 위치한 화소의 색상 값을 가져올 수 있습니다.

Window spy 화면에 Color: D9E1E9 라고 적힌 모습 사진 1. Window Spy에 보이는 색상 값

중요한 점은, 색상 값을 16진수로 적어줄 땐 '16진수 수'를 의미하는 0x 기호를 앞에 붙여야 한다는 것입니다. 오토핫키는 앞에 0x가 붙은 수는 16진수로, 아무것도 붙지 않은 수는 10진수로 해석하기 때문입니다. 따라서, 흰색(R=FF, G=FF, B=FF)을 찾고 싶다면 0xFFFFFF로 적어야하죠.

4. Variation

ImageSearch의 *n 옵션과 동일합니다. (단, * 기호는 쓰지 않습니다.) 마찬가지로 0부터 255까지 적을 수 있으며, 예를 들어서 2를 지정했다면 #444444 색상은 #424242부터 #464646까지 동일한 것으로 간주합니다.

그렇게 어렵지 않죠? 간단한 예제를 하나 만들어보고 마무리해도 될 것 같습니다.

실습

1. 마우스 근처에서 원하는 색상의 화소를 찾아보기

1F1::
2{
3 MouseGetPos(&posX, &posY)
4 if (PixelSearch(&vx, &vy, posX, posY, posX + 100, posY + 100, 0x00C896))
5 MsgBox("찾았습니다! (" vx ", " vy ")")
6}
7
8F2::
9{
10 ExitApp
11}
예제 1. PixelSearch의 사용

위 예제는 마우스 커서의 현재 좌표를 가져와, 그 좌표로부터 (x + 100, y + 100) 좌표까지의 범위에서 0x00C896 색상을 찾는 예제입니다. 한마디로 마우스 커서 위치를 좌상단으로 하여, 너비와 높이가 각각 100px인 사각형이 범위인 것이죠.

마우스 커서를 왼쪽 위 꼭짓점으로 하는 사각형 범위가 그려진 모습 사진 2. 마우스 커서 위치를 기준으로 100 x 100 범위 좋습니다. 열심히 했으니 다음 강부터는 조금 쉽게 가보겠습니다.