🔬 과학·테크/🔥 AutoHotkey v2 입문 가이드

AutoHotkey v2 입문 가이드 #14: 실전 예제 모음 - 바로 쓰는 스크립트 10선

_eNKI 2025. 12. 17. 19:51
반응형

🎯 이 글에서 배우는 것: 복사해서 바로 쓸 수 있는 실용적인 스크립트 10가지


🎁 들어가며

지금까지 배운 것들을 총동원해서 실제로 유용한 스크립트들을 만들어봅시다. 모든 코드는 복사해서 바로 사용할 수 있습니다!

💡 각 스크립트 앞에 #Requires AutoHotkey v2.0#SingleInstance Force를 추가하세요!


1️⃣ 클립보드 히스토리 (최근 복사 10개 저장)

복사한 텍스트를 10개까지 저장하고, 단축키로 선택해서 붙여넣기!

#Requires AutoHotkey v2.0
#SingleInstance Force

; 클립보드 히스토리 저장 배열
global clipHistory := []
global maxHistory := 10

; 클립보드 변경 감지
OnClipboardChange(ClipChanged)

ClipChanged(dataType) {
    if (dataType = 1) {  ; 텍스트
        text := A_Clipboard
        if (text != "" && (clipHistory.Length = 0 || clipHistory[1] != text)) {
            clipHistory.InsertAt(1, text)
            if (clipHistory.Length > maxHistory)
                clipHistory.Pop()
        }
    }
}

; Win+V: 클립보드 히스토리 보기
#v::{
    if (clipHistory.Length = 0) {
        MsgBox("클립보드 히스토리가 비어있습니다")
        return
    }

    menuText := ""
    for i, item in clipHistory {
        preview := SubStr(item, 1, 50)
        preview := StrReplace(preview, "`n", " ")
        menuText .= i ". " preview "`n"
    }

    result := InputBox(menuText, "클립보드 히스토리 (번호 입력)", "w400 h300")
    if (result.Result = "OK" && result.Value != "") {
        num := Integer(result.Value)
        if (num >= 1 && num <= clipHistory.Length) {
            A_Clipboard := clipHistory[num]
            Send("^v")
        }
    }
}

2️⃣ 자동 백업 스크립트

작업 중인 폴더를 매시간 자동 백업!

#Requires AutoHotkey v2.0
#SingleInstance Force
#Persistent

; 설정
sourceFolder := "C:\MyWork"
backupFolder := "D:\Backup"
backupInterval := 3600000  ; 1시간 (밀리초)

; 타이머 시작
SetTimer(DoBackup, backupInterval)
MsgBox("자동 백업 시작! 1시간마다 백업됩니다.")

DoBackup() {
    timestamp := FormatTime(, "yyyyMMdd_HHmmss")
    backupPath := backupFolder "\" timestamp

    try {
        DirCopy(sourceFolder, backupPath)
        TrayTip("백업 완료", "백업 위치: " backupPath, 1)
    } catch as e {
        TrayTip("백업 실패", e.Message, 3)
    }
}

; Ctrl+Alt+B: 수동 백업
^!b::DoBackup()

3️⃣ 빠른 구글 검색

선택한 텍스트를 바로 구글에서 검색!

#Requires AutoHotkey v2.0
#SingleInstance Force

; Ctrl+Shift+G: 선택한 텍스트 구글 검색
^+g::{
    old := A_Clipboard
    A_Clipboard := ""
    Send("^c")
    if !ClipWait(1) {
        MsgBox("텍스트를 선택해주세요")
        return
    }

    query := A_Clipboard
    A_Clipboard := old

    ; URL 인코딩 (간단 버전)
    query := StrReplace(query, " ", "+")
    Run("https://www.google.com/search?q=" query)
}

; Ctrl+Shift+Y: 유튜브 검색
^+y::{
    old := A_Clipboard
    A_Clipboard := ""
    Send("^c")
    if !ClipWait(1)
        return

    query := StrReplace(A_Clipboard, " ", "+")
    A_Clipboard := old
    Run("https://www.youtube.com/results?search_query=" query)
}

; Ctrl+Shift+N: 네이버 검색
^+n::{
    old := A_Clipboard
    A_Clipboard := ""
    Send("^c")
    if !ClipWait(1)
        return

    query := A_Clipboard
    A_Clipboard := old
    Run("https://search.naver.com/search.naver?query=" query)
}

4️⃣ 창 항상 위에 고정 토글

원하는 창을 항상 맨 위에!

#Requires AutoHotkey v2.0
#SingleInstance Force

; Win+T: 현재 창 항상 위에 토글
#t::{
    hwnd := WinGetID("A")
    exStyle := WinGetExStyle(hwnd)

    if (exStyle & 0x8) {  ; WS_EX_TOPMOST
        WinSetAlwaysOnTop(0, hwnd)
        TrayTip("항상 위에", "해제됨", 1)
    } else {
        WinSetAlwaysOnTop(1, hwnd)
        TrayTip("항상 위에", "설정됨", 1)
    }
}

5️⃣ 빠른 이모지 입력기

자주 쓰는 이모지를 단축키로!

#Requires AutoHotkey v2.0
#SingleInstance Force

; 핫스트링으로 이모지 입력
:*:;thumbsup::👍
:*:;thumbsdown::👎
:*:;heart::❤️
:*:;smile::😊
:*:;laugh::😂
:*:;think::🤔
:*:;fire::🔥
:*:;check::✅
:*:;x::❌
:*:;star::⭐
:*:;rocket::🚀
:*:;clap::👏
:*:;eyes::👀
:*:;pray::🙏
:*:;100::💯

; Win+.; 이모지 패널 열기 (Windows 10/11 기본 기능)
; 이미 Windows에 있지만, 없는 경우를 위해
#+.::Send("{LWin down}.{LWin up}")

6️⃣ 스크린샷 + 자동 저장

Print Screen으로 스크린샷 찍고 자동으로 파일 저장!

#Requires AutoHotkey v2.0
#SingleInstance Force

screenshotFolder := A_Desktop "\Screenshots"

; 폴더 없으면 생성
if !DirExist(screenshotFolder)
    DirCreate(screenshotFolder)

; PrintScreen: 전체 화면 캡처 후 저장
PrintScreen::{
    Send("{PrintScreen}")
    Sleep(100)

    timestamp := FormatTime(, "yyyyMMdd_HHmmss")
    filename := screenshotFolder "\screenshot_" timestamp ".png"

    ; 클립보드 이미지를 파일로 저장 (PowerShell 이용)
    psScript := "
    (
    Add-Type -AssemblyName System.Windows.Forms
    $img = [System.Windows.Forms.Clipboard]::GetImage()
    if ($img) { $img.Save('" filename "') }
    )"

    RunWait('powershell -command "' psScript '"',, "Hide")

    if FileExist(filename)
        TrayTip("스크린샷 저장됨", filename, 1)
}

; Alt+PrintScreen: 활성 창만 캡처
!PrintScreen::{
    Send("!{PrintScreen}")
    Sleep(100)

    timestamp := FormatTime(, "yyyyMMdd_HHmmss")
    filename := screenshotFolder "\window_" timestamp ".png"

    psScript := "
    (
    Add-Type -AssemblyName System.Windows.Forms
    $img = [System.Windows.Forms.Clipboard]::GetImage()
    if ($img) { $img.Save('" filename "') }
    )"

    RunWait('powershell -command "' psScript '"',, "Hide")

    if FileExist(filename)
        TrayTip("스크린샷 저장됨", filename, 1)
}

7️⃣ 자동 타이핑 (반복 입력)

같은 텍스트를 여러 번 입력해야 할 때!

#Requires AutoHotkey v2.0
#SingleInstance Force

; Ctrl+Shift+R: 반복 입력 설정
^+r::{
    textResult := InputBox("반복할 텍스트를 입력하세요", "자동 타이핑")
    if (textResult.Result != "OK")
        return

    countResult := InputBox("반복 횟수를 입력하세요", "자동 타이핑")
    if (countResult.Result != "OK")
        return

    delayResult := InputBox("입력 간격(ms)을 입력하세요`n(기본: 100)", "자동 타이핑")
    delay := (delayResult.Result = "OK" && delayResult.Value != "") ? Integer(delayResult.Value) : 100

    MsgBox("3초 후 시작합니다. 입력할 곳을 클릭하세요!")
    Sleep(3000)

    count := Integer(countResult.Value)
    Loop count {
        SendText(textResult.Value)
        Send("{Enter}")
        Sleep(delay)
    }

    TrayTip("완료", count "회 입력 완료", 1)
}

8️⃣ 마우스 좌표 복사기 (스크립트 개발용)

마우스 위치를 쉽게 알아내서 코드에 활용!

#Requires AutoHotkey v2.0
#SingleInstance Force

; F2: 현재 마우스 좌표 복사
F2::{
    MouseGetPos(&x, &y)
    coord := "Click(" x ", " y ")"
    A_Clipboard := coord
    TrayTip("좌표 복사됨", coord, 1)
}

; Shift+F2: 좌표 + 색상 정보
+F2::{
    MouseGetPos(&x, &y)
    color := PixelGetColor(x, y)
    info := "X: " x ", Y: " y "`nColor: " color

    A_Clipboard := "Click(" x ", " y ")"
    MsgBox(info, "마우스 정보")
}

; Ctrl+F2: 창 기준 상대 좌표
^F2::{
    MouseGetPos(&x, &y, &hwnd)
    WinGetPos(&winX, &winY,,, hwnd)
    relX := x - winX
    relY := y - winY

    coord := "Click(" relX ", " relY ")  ; 창 기준"
    A_Clipboard := coord
    TrayTip("상대 좌표 복사됨", coord, 1)
}

9️⃣ 빠른 메모장 (플로팅 노트)

떠다니는 작은 메모장!

#Requires AutoHotkey v2.0
#SingleInstance Force

; Win+M: 플로팅 메모장 토글
#m::{
    static noteGui := 0
    static noteEdit := 0

    if (noteGui && WinExist("ahk_id " noteGui.Hwnd)) {
        noteGui.Destroy()
        noteGui := 0
        return
    }

    noteGui := Gui("+AlwaysOnTop +Resize", "Quick Note")
    noteGui.SetFont("s10", "맑은 고딕")
    noteEdit := noteGui.AddEdit("w300 h200 vNoteText Multi WantReturn")

    ; 저장된 내용 불러오기
    noteFile := A_ScriptDir "\quicknote.txt"
    if FileExist(noteFile)
        noteEdit.Value := FileRead(noteFile)

    noteGui.OnEvent("Close", SaveAndClose)
    noteGui.OnEvent("Size", GuiResize)
    noteGui.Show()

    SaveAndClose(*) {
        try FileDelete(noteFile)
        FileAppend(noteEdit.Value, noteFile)
        noteGui.Destroy()
        noteGui := 0
    }

    GuiResize(thisGui, MinMax, Width, Height) {
        if (MinMax != -1)
            noteEdit.Move(,, Width - 20, Height - 20)
    }
}

🔟 업무 자동화 종합 스크립트

실제 업무에서 바로 쓸 수 있는 종합 스크립트!

#Requires AutoHotkey v2.0
#SingleInstance Force

; ============================================
; 자주 쓰는 상용구
; ============================================
:*:;email::myemail@company.com
:*:;phone::010-1234-5678
:*:;addr::서울시 강남구 테헤란로 123
:*:;sign::
(
감사합니다.

홍길동 드림
010-1234-5678
myemail@company.com
)

; 현재 날짜/시간
:*:;date::{
    SendText(FormatTime(, "yyyy-MM-dd"))
}
:*:;time::{
    SendText(FormatTime(, "HH:mm:ss"))
}
:*:;now::{
    SendText(FormatTime(, "yyyy-MM-dd HH:mm"))
}

; ============================================
; 자주 쓰는 프로그램 실행
; ============================================
#n::Run("notepad")
#c::Run("calc")
#e::Run("explorer " A_MyDocuments)

; ============================================
; 창 관리
; ============================================
; Win+↑: 창 최대화
#Up::WinMaximize("A")

; Win+↓: 창 최소화
#Down::WinMinimize("A")

; Win+Shift+C: 창 중앙 정렬
#+c::{
    WinGetPos(,, &w, &h, "A")
    screenW := A_ScreenWidth
    screenH := A_ScreenHeight
    newX := (screenW - w) / 2
    newY := (screenH - h) / 2
    WinMove(newX, newY,,, "A")
}

; ============================================
; 텍스트 처리
; ============================================
; Ctrl+Shift+U: 대문자 변환
^+u::{
    old := A_Clipboard
    A_Clipboard := ""
    Send("^c")
    if ClipWait(1) {
        A_Clipboard := StrUpper(A_Clipboard)
        Send("^v")
    }
    Sleep(100)
    A_Clipboard := old
}

; Ctrl+Shift+L: 소문자 변환
^+l::{
    old := A_Clipboard
    A_Clipboard := ""
    Send("^c")
    if ClipWait(1) {
        A_Clipboard := StrLower(A_Clipboard)
        Send("^v")
    }
    Sleep(100)
    A_Clipboard := old
}

; ============================================
; 유틸리티
; ============================================
^!r::Reload      ; Ctrl+Alt+R: 새로고침
^!p::Suspend     ; Ctrl+Alt+P: 일시정지
^!x::ExitApp     ; Ctrl+Alt+X: 종료

📋 스크립트 모음 다운로드 팁

이 스크립트들을 하나로 합쳐서 사용하거나, 용도별로 분리해서 사용하세요:

📁 MyScripts/
├── main.ahk           ; 메인 스크립트 (시작 시 자동 실행)
├── clipboard.ahk      ; 클립보드 관련
├── search.ahk         ; 검색 관련
├── window.ahk         ; 창 관리
└── text.ahk           ; 텍스트 처리

여러 스크립트를 하나로 합치려면:

; main.ahk
#Include "clipboard.ahk"
#Include "search.ahk"
#Include "window.ahk"

🎯 다음 시간 예고

마지막 글에서는 디버깅과 팁을 다룹니다:

  • 문제 해결 방법
  • 성능 최적화
  • 고급 팁과 트릭

시리즈의 대미를 장식합니다! 🏁


이전 글: [#13 문자열 처리]
다음 글: [#15 디버깅과 팁 - 문제 해결의 기술]

반응형