1531 b7002

#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
}