본문 바로가기

Software

Autohotkey - 윈도우를 내 마음대로 컨트롤할 수 있는 매크로 프로그램

Introduction

Autohotkey는 윈도우에서 필요한 기능을 복잡한 Visual C++을 통해 구현하지 않아도 비교적 빠르고 쉽게 구현할 수 있는 매크로 프로그램이다. Autohotkey 전용 프로그래밍 언어를 지원하는데 이를 통해 윈도우 내부의 다양한 함수들을 조작할 수 있고 생각할 수 있는 거의 모든 기능들을 간단하게 구현할 수 있다. 필자는 윈도우 11에서 사용하고 있으며 윈도우 10에서도 정상적으로 작동하는 것을 확인하였다.

 

필자가 현재(24.01) 사용하고 있는 Autohotkey 버전은 1.1 버전이다. Autohotkey 2.x 버전은 전용 에디터인 Scite4Autohotkey를 사용하기 어렵기 때문에 1.x 버전을 사용하고 있다. Autohotkey 프로그램은 구글링을 통해서 설치할 수 있으며 .ahk 파일 편집은 scite4autohotkey 프로그램을 통해 편집 및 컴파일 할 수 있다.

필자가 사용하고 있는 스크립트는 다음과 같다.

 

myahk_blog.ahk
0.00MB

 

 

Ahk language 

Autohotkey는 자체 .ahk 문법을 가지고 있다. 만약 F7키를 키바인딩하여 특정 동작을 수행하고 싶으면 아래와 같이 하면 된다.

F7::
Do Something
return

 

Ctrl 키는 '^' 이고 Alt 키는 '!' 로 키바인딩을 설정할 수 있다. 예를 들어 Ctrl + Alt + f 키로 키바인딩을 수행하면 다음과 같다.

^!f::
Do Something
return

 

또한 Windows 키는 'LWin' 이고 Shift 키는 'LShift' 로 사용할 수 있다. 이외에도 키보드를 통해 입력할 수 있는 모든 문자들을 사용할 수 있며 자유롭게 키바인딩을 조합하여 사용할 수 있다.

 

 

다음 섹션에는 필자가 유용하다고 생각하는 기능들을 설명한다. 

Useful features

Volume control

; 볼륨을 +5만큼 높인다
^PgUp::
SoundSet, +5
SoundGet, master_volume
Notify("Volum Up " + Round(master_volume, 0), 1000)
return

; 볼륨을 -5만큼 내린다
^PgDn::
SoundSet, -5
SoundGet, master_volume
Notify("Volum Down " + Round(master_volume, 0), 1000)
return

; 음소거 모드를 토글한다
^Home::
  SoundGet, isMute, MASTER, MUTE
  if (isMute = "Off") {
	Notify("Mute", 1000)
    SoundSet, +1, MASTER, MUTE
	}
  else {
	Notify("Unmute", 1000)
    SoundSet, -1, MASTER, MUTE
	}
return

Ctrl + Next는 Ctrl + Page Down을 의미한다. 볼륨을 조절하고 음소거를 토글할 수 있다.

 

Window control

; 프로그램을 항상 위에 고정시킨다
^Space::
WinSet, AlwaysonTop, Toggle, A
Notify("Always on Top", 1000)
return

; 마우스로 클릭한 창을 이동시킨다
^!LButton::
	CoordMode, Mouse
	MouseGetPos, EWD_MouseStartX, EWD_MouseStartY, EWD_MouseWin
	WinGetPos, EWD_OriginalPosX, EWD_OriginalPosY,,, % wTitle := "ahk_id " EWD_MouseWin
	mv_mode = mv
	SetTimer, EWD_WatchMouse, 10
return

; 마우스로 클릭한 창의 크기를 조절한다
^!RButton::
	CoordMode, Mouse
	MouseGetPos, EWD_MouseStartX, EWD_MouseStartY, EWD_MouseWin
	WinGetPos, ,, EWD_OriginalPosX, EWD_OriginalPosY, % wTitle := "ahk_id " EWD_MouseWin
	mv_mode = sz
	SetTimer, EWD_WatchMouse, 10
return

; 현재 활성화된 창을 맨 뒤로 이동시킨다
Ctrl & h::Send !{Escape}

Ctrl + Space로 항상 위에 모드를 토글한다. 현재는 PowerToys의 항상 위에 기능을 사용해서 잘 사용하진 않는다.
Ctrl + 마우스 왼쪽 버튼, Ctrl + 마우스 오른쪽 버튼. 창을 이동하고 사이즈를 조절할 수 있다. 필자가 생각하는 가장 유용한 기능이다.
영상에는 Alt가 섞여있는데 실제로는 Ctrl + h만 입력하였다. 현재 창을 뒤로 숨긴다.

Open program

; 계산기를 실행한다
^!c::
#SingleInstance force
if WinExist("Calculator")
	WinActivate
else
	Run "C:\Windows\WinSxS\wow64_microsoft-windows-calc_31bf3856ad364e35_10.0.22621.1_none_15a8774142daea37\calc.exe"
return

; 메모장을 연다
^!n::
#SingleInstance force
if WinExist("ahk_exe notepad.exe")
	WinActivate
else
	Run "C:\Windows\System32\notepad.exe"
return

; 화면 캡처 도구를 연다
F4::
{
	SetTitleMatchMode, % (Setting_A_TitleMatchMode := A_TitleMatchMode) ? "RegEx" :
		if WinExist("ahk_class Microsoft-Windows-.*SnipperToolbar")
		{
			WinGet, State, MinMax
			if(state = -1){
				WinRestore
				Send, ^n
			}
			else if WinActive()
				WinMinimize
			else{
				WinActivate
				Send, ^n
			}
		}
		else if WinExist("ahk_class Microsoft-Windows-.*SnipperEditor"){
			WinGet, State, MinMax
			if (State = -1)
				WinRestore
			else if WinActive()
				WinMinimize
			else
				WinActivate
		}
		else{
			Run, snippingtool.exe
				if(SubStr(A_OSVersion,1,2)=10){
					WinWait, ahk_class Microsoft-Windows-.*SnipperToolbar,,3
					Send, ^n
				}
		}
		SetTitleMatchMode, %Setting_A_TitleMatchMode%
		return
}

메모장, 계산기, 캡처도구 열기

 

Other controls

; 화면을 잠근다
F1::
DllCall("LockWorkStation")
return

; 현재 윈도우에 띄어져 있는 모든 창 목록을 본다
F6::
^!Tab
return

; 휴지통을 비운다
F9::
{
FileRecycleEmpty
Notify("Recycle Bin is emptified", 1500)
return
}

; 절전모드로 들어간다
Insert::
Run nircmd.exe standby
;Run rundll32.exe powrprof.dll,SetSuspendState 0,1,0
return

F6 (Ctrl+Alt+Tab) 키를 통해 현재 띄워져 있는 창을 볼 수 있으며 F9 키를 통해 휴지통을 비울 수 있다.