오토핫키를 이용하여 바탕화면속 설정된 범위내에
내가 적용한 이미지를 서치하여 같은 폴더내 이미지.png가 발견되었을때만
정해놓은 입력이 들어가도록 만든 스크립트 입니다.
(이 글은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.)
;이 아래 쭉 복사
#Persistent
#SingleInstance Force
#NoEnv
global iniFile := A_ScriptDir . “\settings.ini”
global searchArea := {} ; 이미지 검색 영역
global searchActive := false ; 이미지 서치 활성화 여부
global imgPath := A_ScriptDir . “\이미지.PNG” ; 부활 이미지 경로
; 실행 시 ini에서 영역 불러오기
LoadAreaFromIni()
Gui, +AlwaysOnTop
Gui, Add, Button, x10 y10 w80 h30 gSetResurrectionArea, 서치 범위설정
Gui, Add, Button, x100 y10 w100 h30 gToggleSearch, 이미지서치 시작/중지
Gui, Show, w220 h60
return
SetResurrectionArea:
Gui +OwnDialogs
MsgBox, 64, 부활 영역 설정, Shift 키를 누른 상태에서 마우스로 드래그하여 부활 이미지 검색 영역을 선택하세요.
CoordMode, Mouse, Screen
; 반투명 빨간 네모 박스 GUI 생성
Gui, 2: New, -Caption +ToolWindow +AlwaysOnTop
Gui, 2: Color, Red
Gui, 2: Show, NoActivate
Gui2Hwnd := WinExist(“ahk_class AutoHotkeyGUI”)
WinSet, Transparent, 150, ahk_id %Gui2Hwnd%
; 드래그 시작 감지
Loop {
GetKeyState, ShiftState, Shift, P
GetKeyState, LButtonState, LButton, P
if (ShiftState = “D” && LButtonState = “D”) {
MouseGetPos, x1, y1
Break
}
Sleep, 10
}
; 드래그 중 반투명 박스 업데이트
Loop {
MouseGetPos, x2, y2
w := Abs(x2 – x1), h := Abs(y2 – y1)
x := (x1 < x2) ? x1 : x2
y := (y1 < y2) ? y1 : y2
if (w > 5 && h > 5) { ; 최소 크기 제한
Gui, 2: Show, x%x% y%y% w%w% h%h% NoActivate
WinSet, Transparent, 150, ahk_id %Gui2Hwnd%
}
GetKeyState, LButtonState, LButton, P
if (LButtonState = “U”) {
Break
}
Sleep, 10
}
Gui, 2: Destroy ; GUI 삭제
; 좌표 정리
if (x1 > x2)
temp := x1, x1 := x2, x2 := temp
if (y1 > y2)
temp := y1, y1 := y2, y2 := temp
if ((x2 – x1) < 5 || (y2 – y1) < 5) {
MsgBox, 16, 오류, 선택한 영역이 너무 작습니다. 다시 설정해 주세요.
return
}
global searchArea := {x1: x1, y1: y1, x2: x2, y2: y2}
SaveAreaToIni()
MsgBox, 64, 설정 완료, 이미지검색 영역이 설정 및 저장되었습니다!`n(%x1%, %y1%) → (%x2%, %y2%)
Return
ToggleSearch:
searchActive := !searchActive
if (searchActive) {
if (!searchArea.HasKey(“x1”)) {
MsgBox, 16, 오류, 먼저 이미지 검색 영역을 설정해 주세요!
searchActive := false
return
}
ToolTip, 이미지서치 시작!
SetTimer, ImageSearchLoop, 300
} else {
ToolTip, 이미지서치 중지!
SetTimer, ImageSearchLoop, Off
Sleep, 800
ToolTip
}
Sleep, 800
ToolTip
return
;——-이 아래부분(ImageSearchLoop:) 이 이미지 발견시 입력할 내용 적는곳
ImageSearchLoop:
if (!searchActive || !searchArea.HasKey(“x1”))
return
; 객체 값을 변수로 치환
x1 := searchArea.x1
y1 := searchArea.y1
x2 := searchArea.x2
y2 := searchArea.y2
CoordMode, Pixel, Screen
CoordMode, Mouse, Screen
ImageSearch, foundX, foundY, %x1%, %y1%, %x2%, %y2%, %imgPath%
if (ErrorLevel = 0) {
;————————- (여기부터)이 구분선 사이를 수정하면 됩니다.———————————
ToolTip, 이미지 발견!
} else {
ToolTip, 이미지 발견 안됨!
}
Sleep, 1000
ToolTip
;————————-(여기 사이)이 구분선 사이를 수정하면 됩니다.———————————
return
; ———- 저장 및 불러오기 함수 ———-
SaveAreaToIni() {
global searchArea, iniFile
if (searchArea.HasKey(“x1”)) {
areaText := searchArea.x1 . “,” . searchArea.y1 . “,” . searchArea.x2 . “,” . searchArea.y2
IniWrite, %areaText%, %iniFile%, SearchArea, Resurrection
}
}
LoadAreaFromIni() {
global searchArea, iniFile
IniRead, coords, %iniFile%, SearchArea, Resurrection,
if (coords != “”) {
arr := StrSplit(coords, “,”)
if (arr.MaxIndex() = 4) {
searchArea := {x1: arr[1], y1: arr[2], x2: arr[3], y2: arr[4]}
}
}
}
GuiClose:
ExitApp
사용법
- 서치할 이미지를 준비한다.
예:

딱 저것과 같은 크기의 같은 이미지만 서치되므로 직접 캡쳐해서 준비한다(윈도우 기본캡쳐도구 추천)
이미지는 오토핫키 스크립트와 같은 폴더에 있어야 하며 이미지 이름과 확장자는 이미지.png 이다.
2.스크립트를 실행한다.
3.서치범위 설정버튼을 누르고 쉬프트+마우스 좌클릭 드래그로 서치를 할 영역을 설정한다.
4. 이미지를 해당범위안에 보이게 했다 안보이게했다 반복하며 테스트해본다.
5.정상작동한다면 마우스커서위에 이미지발견! 이라는 툴팁이 보인다.
추가설명
ToolTip, 이미지 발견!
} else {
ToolTip, 이미지 발견 안됨!
}
Sleep, 1000
ToolTip
이 부분을 모두 지우고 이미지 발견시 작동할 내용으로 적어넣으면 됩니다.
예: 이미지가 발견되면 – 숫자 1 누르고 조금 쉬고 엔터 누르기
Send, 1 ;1 누르고
Sleep, 50 ;50ms 쉬고
Send, {Enter} ;엔터 눌러라
이런식으로만 딱 적으면 됩니다.
하시다가 어려운 부분있거나 궁금한점 있으면 댓글로 남겨주세요. 다음글의 좋은 소재가 됩니다.