프날 오토핫키 강좌  v2

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

지금 보시는 강좌는 과거 오랜 시간동안 알려진 오토핫키(v1.1)의 차세대 버전인 오토핫키 v2를 다루고 있습니다.
만약 구버전인 '오토핫키 v1.1'의 강좌를 찾으신다면 프날 오토핫키 강좌(https://pnal.kr)를 봐주시면 되지만, 새로 오토핫키를 배우신다면 v2 버전을 배우시는 것을 강력히 추천드립니다.

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 범위 좋습니다. 열심히 했으니 다음 강부터는 조금 쉽게 가보겠습니다.

질문하러 가기