#Requires AutoHotkey v2.0
#SingleInstance Force
; ==============================================================================
; 기본 환경 설정 (스크립트 최상단 배치 필수)
; ==============================================================================
SetTitleMatchMode(2)
SetControlDelay(1)
SetWinDelay(0)
SetKeyDelay(0, 0)
SendMode("Input")
SetMouseDelay(-1)
CoordMode("Mouse", "Screen")
CoordMode("Pixel", "Screen")
; 여러 클립보드 값을 저장할 객체 생성 (글로벌 변수 충돌 방지)
global Slots := Map()
; ==============================================================================
; 다중 클립보드 단축키
; ==============================================================================
^+1::CopyToSlot(1)
^+2::CopyToSlot(2)
^+3::CopyToSlot(3)
^+4::CopyToSlot(4)
^!1::PasteFromSlot(1)
^!2::PasteFromSlot(2)
^!3::PasteFromSlot(3)
^!4::PasteFromSlot(4)
; ==============================================================================
; 자동화 단축키
; ==============================================================================
; --- F9: 엑셀에서 타겟티켓 위에 마우스 올리면 복붙 ---
F9:: {
CopyToSlot(1)
Sleep(200)
imagePath := "C:\Users\CNXK\Desktop\Yun\Template\ak.Assign\301.png"
if !WaitAndClickImage(imagePath, 2000, "*10", 0, 0, 3, "이미지를 찾지 못했습니다: err01-2")
return
Sleep(580)
PasteFromSlot(1)
Sleep(300)
Send("{Enter}")
}
; --- F10: reply 확인버튼 ---
F10:: {
imagePath := "C:\Users\CNXK\Desktop\Yun\Template\ak.Assign\302.png"
WaitAndClickImage(imagePath, 10000, "*10", 0, 0, 1, "이미지를 찾지 못했습니다: err01")
}
; --- F6: A&S 이름남기기 ---
F6:: {
basePath := "C:\Users\CNXK\Desktop\Yun\Worksheets\Image\"
if !WaitAndClickImage(basePath "201.png", 180000, "*30", 20, 20, 1, "이미지를 찾지 못했습니다: err201")
return
Sleep(200)
if !WaitAndClickImage(basePath "202.png", 180000, "*30", 10, 1, 1, "이미지를 찾지 못했습니다: err202")
return
Sleep(200)
SendInput("{Down}")
Sleep(200)
SendInput("{Enter}")
Sleep(200)
SendInput("{Tab}")
SendInput("심윤섭")
WaitAndClickImage(basePath "203.png", 180000, "*30", 0, 0, 1, "이미지를 찾지 못했습니다: err203")
}
; --- F7: A&S 티켓번호 복사 및 유저정보 복사 ---
F7:: {
basePath := "C:\Users\CNXK\Desktop\Yun\Worksheets\Image\"
CopyToSlot(4) ; 104 이미지 호출 전 복사
Sleep(200)
if !WaitAndClickImage(basePath "104.png", 180000, "*70", 0, 0, 2, "이미지를 찾지 못했습니다: err104")
return
if !WaitAndClickImage(basePath "105.png", 180000, "*70", 0, 0, 2, "이미지를 찾지 못했습니다: err105")
return
Sleep(120)
CopyToSlot(2)
if !WaitAndClickImage(basePath "106.png", 180000, "*70", 0, 0, 1, "이미지를 찾지 못했습니다: err106")
return
if !WaitAndClickImage(basePath "107.png", 180000, "*70", 0, 0, 1, "이미지를 찾지 못했습니다: err107")
return
if !WaitAndClickImage(basePath "108.png", 180000, "*70", 0, 55, 3, "이미지를 찾지 못했습니다: err108")
return
Sleep(180)
CopyToSlot(3)
if !WaitAndClickImage(basePath "109.png", 180000, "*70", 0, 55, 2, "이미지를 찾지 못했습니다: err109")
return
CopyToSlot(1)
Sleep(200)
Send("!{F4}")
}
; --- F8: 엑셀에 붙여넣기 ---
F8:: {
PasteFromSlot(4) ; 티켓넘버
Sleep(120)
Loop 2 {
Send("{Right}")
Sleep(120)
}
PasteFromSlot(1) ; 국가
Sleep(120)
Send("{Right}")
Sleep(120)
PasteFromSlot(2) ; GUID
Sleep(120)
Send("{Right}")
Sleep(120)
PasteFromSlot(3) ; Email
Sleep(120)
Send("{Enter}")
Sleep(120)
Loop 4 {
Send("{Left}")
Sleep(120)
}
}
; ==============================================================================
; 공통 헬퍼 함수 (최적화의 핵심)
; ==============================================================================
; 슬롯 복사 함수
CopyToSlot(slotNum) {
A_Clipboard := ""
Send("^c")
if ClipWait(1)
Slots[slotNum] := A_Clipboard
}
; 슬롯 붙여넣기 함수 (Send 텍스트 입력보다 빠르고 안전한 클립보드 방식)
PasteFromSlot(slotNum) {
if !Slots.Has(slotNum)
return
savedClip := A_Clipboard
A_Clipboard := Slots[slotNum]
Sleep(50) ; 클립보드 반영 대기
Send("^v")
Sleep(50)
A_Clipboard := savedClip
}
; 이미지 검색 및 클릭 통합 함수
WaitAndClickImage(imagePath, timeout_ms, variation := "*70", offsetX := 0, offsetY := 0, clicks := 1, errMsg := "") {
startTime := A_TickCount
FoundX := 0, FoundY := 0
while !ImageSearch(&FoundX, &FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, variation " " imagePath) {
if (A_TickCount - startTime > timeout_ms) {
if (errMsg != "")
MsgBox(errMsg)
return false
}
Sleep(100)
}
targetX := FoundX + offsetX
targetY := FoundY + offsetY
Loop clicks {
MouseClick("Left", targetX, targetY)
if (clicks > 1 && A_Index < clicks)
Sleep(90)
}
return true
}
