오토핫키 ImagePut (비활성 이미지서치)
오토핫키 1 버전에서는 비활성 이미지 서치를 할 때, Gdip_All.ahk, Gdip_ImageSearch.ahk 를 사용해 서치했다. 그러나 2 버전에서는 호환도 잘 되지 않고, 더 좋은 라이브러리가 있어 사용할 필요가 없다. 그 라이브러리는 바로 ImagePut이다.
개발자 github에 가서 ImagePut.ahk 를 다운받으면 된다: https://github.com/iseahound/ImagePut
이 그림판이 화면에서 보이지 않을 때,
위 도형 이미지를 찾을 것이다.
결과로 다음과 같이 작동한다.
코드:
#include ImagePut.ahk
MinMax := WinGetMinMax("제목 없음 - 그림판")
if (MinMax = -1) {
WinRestore("제목 없음 - 그림판")
}
pic := ImagePutBuffer({window: "제목 없음 - 그림판", crop: [0, 0, 600, 400]})
shape := ImagePutBuffer(".\img\shape.png")
xy := pic.ImageSearch(shape)
if ((xy != 0) && (xy[1] >= 0) && (xy[2] >= 0)) {
WinActivate("제목 없음 - 그림판")
MouseMove xy[1], xy[2]
Click
}
먼저 해당 window가 최소화 상태인지 확인한 후 최소화 상태라면 창을 띄워준다. 해당 window가 다른 창에 가려져 안보이는것은 ImagePutBuffer가 정상적으로 화면을 가져오지만, 최소화 상태라면 정상적으로 화면을 가져올 수 없기 때문이다.
ImagePutBuffer({window: "window title", crop: [x, y, w, h]})로 비활성 윈도우 타이틀과 영역을 선택한다. crop은 선택하지 않아도 된다.
그리고 pic.ImageSearch("이미지 파일 이름")을 하면 반환값으로 이미지 서치가 된 좌측상단 [x, y]가 반환된다. 서치되지 않으면 0을 반환한다.
xy := pic.ImageSearch(shape, 3)
if ((xy != 0) && (xy[1] >= 0) && (xy[2] >= 0)) {
WinActivate("제목 없음 - 그림판")
MouseMove xy[1], xy[2]
Click
}
찾는 이미지가 jpg같이 손실 포맷이면 이미지 서치가 안될 수 있다. 그럴때는 ImageSearch 두번째 매개변수(variation)에 0~255사이의 적당한 값을 넣어 변형을 준다. 그러나 variation을 줬을 경우 이미지를 찾지 못하면 xy[1], xy[2]값에 음수 값이 들어가게 된다. 그것을 판별해야한다.