반응형

🎯 이 글에서 배우는 것: Run으로 프로그램 실행, 창 활성화/대기/제어
🚀 Run - 프로그램 실행하기
Run은 프로그램, 파일, 웹사이트를 실행하는 만능 함수입니다.
기본 사용법
Run("notepad") ; 메모장
Run("calc") ; 계산기
Run("mspaint") ; 그림판
Run("explorer") ; 파일 탐색기
웹사이트 열기
Run("https://www.google.com")
Run("https://www.youtube.com")
Run("mailto:someone@example.com") ; 이메일 클라이언트
파일/폴더 열기
Run("C:\Users\홍길동\Documents\report.docx") ; 파일 열기
Run("C:\Users\홍길동\Downloads") ; 폴더 열기
Run(A_Desktop) ; 바탕화면 열기
특정 프로그램으로 파일 열기
Run("notepad.exe C:\test.txt") ; 메모장으로 파일 열기
Run("code C:\Projects\myproject") ; VS Code로 폴더 열기
🏃 RunWait - 실행 후 대기
프로그램이 종료될 때까지 기다립니다:
RunWait("notepad") ; 메모장 닫힐 때까지 대기
MsgBox("메모장이 닫혔습니다!")
반환값 받기
프로그램의 종료 코드를 받을 수 있습니다:
exitCode := RunWait("myprogram.exe")
MsgBox("종료 코드: " exitCode)
🔍 창 식별하기
창을 제어하려면 먼저 어떤 창인지 알려줘야 합니다.
창 식별 방법
| 방식 | 설명 | 예제 |
|---|---|---|
| 제목 | 창 제목 (일부분도 OK) | "메모장" |
| ahk_class | 창 클래스 | "ahk_class Notepad" |
| ahk_exe | 실행 파일명 | "ahk_exe notepad.exe" |
| ahk_id | 창 핸들(HWND) | "ahk_id 0x12345" |
| ahk_pid | 프로세스 ID | "ahk_pid 1234" |
Window Spy로 확인하기
- AHK 트레이 아이콘 우클릭 → Window Spy
- 원하는 창 클릭
- 정보 확인:
- Window Title (창 제목)
- ahk_class (클래스)
- ahk_exe (실행 파일)
🎯 WinActivate - 창 활성화
창을 앞으로 가져옵니다:
WinActivate("메모장")
WinActivate("ahk_exe notepad.exe")
WinActivate("ahk_class Notepad")
제목 일부분 매칭
SetTitleMatchMode(2) ; 부분 매칭 모드
WinActivate("Chrome") ; "Google Chrome - ..." 같은 창 활성화
SetTitleMatchMode 옵션
| 값 | 동작 |
|---|---|
| 1 | 제목이 해당 문자로 시작 (기본값) |
| 2 | 제목 어디서든 포함 |
| 3 | 정확히 일치 |
| "RegEx" | 정규표현식 매칭 |
⏳ WinWait - 창이 나타날 때까지 대기
창이 열릴 때까지 기다립니다:
Run("notepad")
WinWait("제목 없음 - 메모장") ; 메모장이 열릴 때까지 대기
MsgBox("메모장이 열렸습니다!")
타임아웃 설정
if WinWait("메모장",, 5) { ; 5초까지 대기
MsgBox("창을 찾았습니다!")
} else {
MsgBox("창을 찾지 못했습니다")
}
WinWaitActive - 활성화될 때까지 대기
Run("notepad")
WinWaitActive("메모장") ; 메모장이 활성화될 때까지 대기
Send("자동 입력!")
📋 WinExist - 창 존재 확인
창이 있는지 확인합니다:
if WinExist("메모장") {
MsgBox("메모장이 열려 있습니다")
} else {
MsgBox("메모장이 없습니다")
}
있으면 활성화, 없으면 실행
#n::{ ; Win+N
if WinExist("ahk_exe notepad.exe") {
WinActivate
} else {
Run("notepad")
}
}
🎛️ 창 조작 함수들
WinClose - 창 닫기
WinClose("메모장")
WinClose("ahk_exe notepad.exe")
WinKill - 강제 종료
닫히지 않는 창을 강제로 종료:
WinKill("응답 없음 - 프로그램")
WinMinimize / WinMaximize - 최소화/최대화
WinMinimize("메모장")
WinMaximize("메모장")
WinRestore("메모장") ; 원래 크기로
WinMove - 창 이동/크기 조절
WinMove(0, 0, 800, 600, "메모장") ; x, y, width, height
WinMove(100, 100,,, "메모장") ; 위치만 변경 (크기 유지)
WinHide / WinShow - 창 숨기기/보이기
WinHide("메모장") ; 숨기기
WinShow("메모장") ; 다시 보이기
🔧 실용적인 예제
예제 1: 앱 런처
#Requires AutoHotkey v2.0
; Win+숫자로 자주 쓰는 프로그램 실행/전환
#1::{
if WinExist("ahk_exe notepad.exe")
WinActivate
else
Run("notepad")
}
#2::{
if WinExist("ahk_exe chrome.exe")
WinActivate
else
Run("chrome")
}
#3::{
if WinExist("ahk_exe Code.exe")
WinActivate
else
Run("code")
}
예제 2: 창 정렬
; 현재 창을 화면 왼쪽 절반에 배치
#Left::{
WinMove(0, 0, A_ScreenWidth/2, A_ScreenHeight, "A")
}
; 현재 창을 화면 오른쪽 절반에 배치
#Right::{
WinMove(A_ScreenWidth/2, 0, A_ScreenWidth/2, A_ScreenHeight, "A")
}
💡
"A"는 현재 활성 창을 의미합니다!
예제 3: 새 크롬 창에서 검색
^!g::{ ; Ctrl+Alt+G
query := InputBox("검색어 입력", "Google 검색").Value
if (query != "")
Run("https://www.google.com/search?q=" query)
}
예제 4: 여러 프로그램 한 번에 실행
#w::{ ; Win+W: 작업 환경 세팅
Run("notepad")
Run("calc")
Run("https://www.google.com")
Sleep 2000 ; 창들이 열릴 때까지 대기
; 창 정렬
WinMove(0, 0, 600, 400, "ahk_exe notepad.exe")
WinMove(600, 0, 400, 400, "ahk_exe calc.exe")
}
🖥️ 창 정보 얻기
WinGetTitle - 제목 얻기
title := WinGetTitle("A") ; 활성 창 제목
MsgBox("현재 창: " title)
WinGetClass - 클래스 얻기
class := WinGetClass("A")
MsgBox("클래스: " class)
WinGetPos - 위치/크기 얻기
WinGetPos(&x, &y, &w, &h, "A")
MsgBox("위치: " x ", " y "`n크기: " w " x " h)
WinGetProcessName - 프로세스명 얻기
proc := WinGetProcessName("A")
MsgBox("프로세스: " proc)
🎭 특정 창에서만 동작하기
#HotIf 사용
; 메모장에서만 작동하는 핫키
#HotIf WinActive("ahk_exe notepad.exe")
^1::Send("메모장 전용 단축키!")
^2::Send(FormatTime(, "yyyy-MM-dd HH:mm:ss"))
#HotIf
; 크롬에서만 작동
#HotIf WinActive("ahk_exe chrome.exe")
^1::Send("^t") ; 새 탭
^2::Send("^w") ; 탭 닫기
#HotIf
⚠️ 주의사항
1. 창 제목 변경
파일을 편집하면 창 제목이 바뀝니다:
- 저장 전:
"제목 없음 - 메모장" - 저장 후:
"myfile.txt - 메모장"
; ✅ ahk_exe 사용 권장
WinActivate("ahk_exe notepad.exe")
; 또는 부분 매칭
SetTitleMatchMode(2)
WinActivate("메모장")
2. 관리자 권한
관리자 권한으로 실행된 프로그램은 일반 AHK에서 제어 안 됩니다.
→ AHK도 관리자 권한으로 실행해야 함
3. UWP 앱 (스토어 앱)
계산기 등 Windows 10+ 기본 앱은 특수한 클래스를 가집니다:
; Windows 10+ 계산기
WinActivate("ahk_class ApplicationFrameWindow")
🎮 실습 과제
- Win+G → 구글 열기 (이미 열려있으면 활성화)
- Ctrl+Alt+T → 터미널(cmd) 열기
- Win+Shift+D → 바탕화면 폴더 열기
- Ctrl+Alt+C → 활성 창 정보(제목, 클래스, 위치) 표시
정답 보기 👀
#Requires AutoHotkey v2.0
SetTitleMatchMode(2)
#g::{
if WinExist("Google")
WinActivate
else
Run("https://www.google.com")
}
^!t::{
Run("cmd")
}
#+d::{
Run(A_Desktop)
}
^!c::{
title := WinGetTitle("A")
class := WinGetClass("A")
WinGetPos(&x, &y, &w, &h, "A")
MsgBox("제목: " title "`n클래스: " class "`n위치: " x ", " y "`n크기: " w " x " h)
}
📚 다음 시간 예고
다음 글에서는 변수와 데이터 타입을 배웁니다:
- 변수 선언과 사용
- 문자열, 숫자, 배열, 객체
- 타입 변환
프로그래밍의 기초를 다져봅시다! 📊
🔑 오늘 배운 핵심 정리
| 함수 | 용도 | 예제 |
|---|---|---|
Run() |
실행 | Run("notepad") |
RunWait() |
실행 후 대기 | RunWait("setup.exe") |
WinActivate() |
창 활성화 | WinActivate("메모장") |
WinWait() |
창 대기 | WinWait("메모장", , 5) |
WinExist() |
창 확인 | if WinExist("메모장") |
WinClose() |
창 닫기 | WinClose("메모장") |
WinMove() |
창 이동 | WinMove(0, 0, 800, 600, "A") |
WinGetTitle() |
제목 얻기 | WinGetTitle("A") |
이전 글: [#5 키보드/마우스 입력 보내기]
다음 글: [#7 변수와 데이터 타입]
반응형
'🔬 과학·테크 > 🔥 AutoHotkey v2 입문 가이드' 카테고리의 다른 글
| AutoHotkey v2 입문 가이드 #8: 제어문 - if/else, Loop, While, For (0) | 2025.12.11 |
|---|---|
| AutoHotkey v2 입문 가이드 #7: 변수와 데이터 타입 - 데이터 다루기의 기초 (0) | 2025.12.10 |
| AutoHotkey v2 입문 가이드 #5: 키보드/마우스 입력 보내기 - Send, Click, MouseMove (0) | 2025.12.08 |
| AutoHotkey v2 입문 가이드 #4: 핫스트링(Hotstring) - 타이핑의 마법 (1) | 2025.12.07 |
| AutoHotkey v2 입문 가이드 #3: 핫키(Hotkey) 기초 - 나만의 단축키 만들기 (0) | 2025.12.06 |