기술과 생활 블로그
Lifehacker에서 처음 보고 윈도우용 매크로 중심 스크립트 언어인 오토핫키 (AutoHotKey)를 사용하기 시작했는데, 덕분에 키보드 사용이 편해졌다. Caps Lock 글쇠를 Ctrl로 만드니까 손이 한결 편하고, 윈도우+W로 워드프로세서를 켠다든가, 윈도우+N으로
노트패드++를 켠다든가 하는 단축도 한결 시간을 절약해준다. 뭐 고수들이 하는 활용에는 명함도 못 내밀겠고 주로 단축글쇠를 사용하고 있지만, 그것만으로도 컴퓨터를 사용하는 시간이 쾌적해졌다. 앞으로 기능을 알아가면서 더욱 편리하게 사용할 수 있을 것 같다.
우선 오토핫키를 사용하려면 설치를 해야 한다.
사이트에서 받아다가 (AutoHotKey_L이면 된다) 설치하고, 단축 글쇠를 편하게 사용하려면 시작 프로그램으로 설정한다. 시작 버튼에 우클릭을 하고 프로그램 -> 시작 프로그램에 들어가서 오토핫키 단축 아이콘을 복사해넣으면 된다. 아니면 시작 버튼을 누르고 시작 메뉴에서 오토핫키 단축 아이콘을 시작 프로그램 폴더에다 끌어다 놓아도 되고.

이렇게
오토핫키 스크립트는 .ahk 확장명 텍스트 파일이다. 처음 시작하면 내 문서 폴더에다가 AutoHotKey.ahk 스크립트를 만드는데, 난 이 스크립트 파일 하나로 쭉 사용해오고 있다. 이 파일에다가 원하는 매크로를 지정해주면 된다. 자세한 사용법은 한국 사용자그룹에서 번역한
기본 설명이나 원래 사이트의 다른
자료를 참조하면 되지만, 기본 형식은 이렇다.
이 기본 문구를 이용해 글쇠 기능을 바꿀 수도 있고, 실행 단축 글쇠를 설정할 수도 있는 등 굉장히 다양한 효과를 낼 수 있다. 위에 얘기한 Caps Lock -> Ctrl 변환은
라이프해커에서 보고 따라한 것인데, 보다시피 아주 간단하다.
앞부분은 대문자 고정을 눌렀을 때 나는 효과라는 것을 알려주는 것이고, 뒷부분은 컨트롤을 누른 것과 같은 효과를 내라고 지정해준다. 이렇게 하면 컨트롤 글쇠 대신에 대문자 고정 글쇠를 사용해서 새끼손가락이 편해진다.
그렇다고 대문자 글쇠가 아예 없어지는 건 좀 서운하니까 역시 라이프해커에서 본 대로 Shift+Capslock으로 기존의 Capslock 효과를 내게 해두었다. 즉 다음과 같이 지정하면 된다.
+Capslock::Capslock
Capslock::Control
짐작했는지 모르겠지만 +는 시프트를 줄여서 표현한 것이다. 즉 위의 명령을 해석해보면 Shift와 Capslock -> Capslock이며, 그냥 Capslock -> Control 이 된다.
이렇게 글쇠 기능을 바꾸는 것은 글쇠 조합에도 마찬가지로 적용할 수 있다. 예를 들어 작업창을 전환하는 Alt와 Tab 단축키를 나는 오토핫키 사이트에서 발상을 얻어 다음과 같이 확장했다.
LAlt & CapsLock::AltTab
LShift & Tab::ShiftAltTab
RShift & Enter::AltTab
RShift & Backspace::ShiftAltTab
이 역시 읽어만 봐도 대충 짐작이 갈 것이다. 왼쪽 Alt + Capslock과 오른쪽 Shift + Enter는 Alt + Tab이고, 왼쪽 Shift + Tab와 오른쪽 Shift + BackSpace는 순서가 거꾸로 가는 Shift + Alt + Tab 이다.
이와 같이 스크립트를 고친 다음에는 작업줄에 있는 오토핫키 아이콘을 오른쪽 클릭해서 Reload Script를 선택하면 된다. (현재 돌리고 있는 스크립트를 편집하려면 Edit Script) 혹시 오류가 있으면 어느 줄에 오류가 났는지 알려주므로 디버깅하기도 쉽다.
또 하나 많이 사용한 기능은 프로그램 실행 단축 글쇠이다. 위에 얘기한 윈도우 + W를 눌러 워드프로세서를 실행시키는 명령은 다음과 같다.
#w::Run, %A_ProgramFiles%\Microsoft Office\Office12\WINWORD
#는 윈도우 글쇠의 줄임표이며, A_ProgramFiles는 프로그램 폴더 변수인데 일반적으로 C:\Program Files와 일치한다. 앞뒤에 % 표시를 붙인 것은 문자열 속에서 변수를 구분하는 표시이다.
노트패드++를 바로 실행시키는 명령어는 다음과 같다. (필자는 윈도우 기본 메모장을 노트패드++로
대체했으므로 메모장을 실행시키는 명령과 같다.)
#n::Run, %A_WinDir%\notepad.exe
A_WinDir는 윈도우 폴더로, 보통 C:\Windows이다.
폴더를 여는 것도 마찬가지로 실행 명령으로 할 수 있다.
A_MyDocuments 역시 기본 변수인데, 짐작하겠지만 내 문서 폴더를 가리킨다.
바탕 화면에서 휴지통을 비롯해 아이콘을 모두 없애버린지라 휴지통을 비우는 것도 단축 글쇠로 처리한다.
#x::
FileRecycleEmpty, C:\
MsgBox, 쓰레기통을 비웠습니다.
return
이렇게 하면 휴지통을 비운 다음에 다음과 같은 알림 상자를 띄운다.

확인 누르고 싶지!
마지막으로 내가 많이 쓰는 것은 창을 조작하는 명령이다. 역시 대단한 건 없고 그냥 현재 창을 조작하는 수준이다. 나는 작업줄을 화면 위에 감추어 둔지라 창을 줄이거나 크기를 바꾸려고 포인터를 화면 위로 가져가면 작업줄이 튀어나오는 일이 있어서 단축 글쇠는 더욱 필요한 기능이었다.
특히 번역을 한다거나 기타 두 개 파일을 가지고 작업할 때 창 하나는 모니터 상단 절반을 차지하게 하고 다른 하나는 모니터 하단 절반을 차지하게 해서 두 파일이 화면 위아래를 반씩 가득 채우는 것을 단축 글쇠로 하고 싶었다. 이 효과를 구현하면서 3가지 방법을 차례대로 시도했는데, 오토핫키 변수를 생각해볼 기회이기도 하니 하나씩 설명하겠다.
^!a::WinMove, A, , 0, 0, 1366, 384
^!s::WinMove, A, , 0, 384, 1366, 384
이것이 가장 단순한 방법이다. ^는 Ctrl, !는 Alt, WinMove는 창 이동과 크기 변경 명령이다. 그 다음은 창의 아이디를 넣는 부분인데 A는 현재 창을 가리키며, 그 다음에 공란으로 둔 부분은 창 제목, 그 다음 두 개의 숫자는 각자 창 왼쪽 위 모서리의 X와 Y값, 그 다음 두 숫자는 창의 너비와 높이이다. Ctrl + Alt + A를 누르면 현재 창이 화면의 상단 절반을 차지하고, Ctrl + Alt + S를 누르면 하단 절반을 차지한다.
보다시피 모든 숫자는 고정값, 그리고 필자 본인의 모니터 해상도 (1366 * 768)와 작업 해상도 (작업줄을 숨기므로 화면 전체로 작업)에 맞춘 수이다. 그 결과 해상도나 작업줄 설정이 달라지면 무리가 생긴다. 예를 들어 1024 * 768 해상도로 맞추면 창이 화면보다 넓어지며, 작업줄이 보이도록 설정하면 창 일부가 작업줄 밑으로 들어가 버린다.
해상도나 설정이 달라져도 적용하도록 만들 수는 없을까 생각해서 도움말 파일 변수 부분에서 A_ScreenWidth와 A_ScreenHeight 변수를 찾았다. 이는 화면 가로와 세로 해상도를 픽셀수로 표현한 시스템 변수이다. 그래서 고정값 대신 변수를 넣어 다음과 같이 고쳐보았다. (위 %를 넣지 않은 것은 문자열로 사용하는 것이 아니라서 그렇다. 알림창 같은 곳에 표시하려면 역시 %A_ScreenWidth% 하는 식으로 처리하면 된다.)
^!a::WinMove, A, , 0, 0, A_ScreenWidth, A_ScreenHeight /2
^!s::WinMove, A, , 0, A_ScreenHeight /2, A_ScreenWidth, A_ScreenHeight /2
현재 설정으로 A_ScreenWidth는 1366, A_ScreenHeight는 768이므로 위의 고정값 방식과 같은 결과이기는 하지만, 해상도를 바꾸어도 여전히 같은 효과가 난다는 점에서 좀 더 역동적이다.
하지만 도움말을 좀 더 읽어보니, 불행히도 A_ScreenWidth와 A_ScreenHeight는 화면 전체 해상도이지 작업 영역 해상도가 아니었다. 위 명령은 화면 전체를 사용하는 것을 상정하고 있으므로 작업줄을 숨기지 않도록 설정하면 역시 창이 작업줄 밑으로 들어가는 결과를 낳을 것이었다.
그래서 도움말 파일 링크를 따라가서 SysGet 명령을 찾아냈다. 하위 명령에 따라서는 작업줄 등의 설정도 반영해서 작업 영역을 알아낼 수 있는 명령이다. 즉, 하위 명령을 MonitorWorkArea로 해서
SysGet, 변수명, MonitorWorkArea
를 구하면 작업 영역 변수를 내서 변수명Left는 작업 구역 왼쪽 위 모서리의 X값, 변수명Top은 왼쪽 위 모서리의 Y값, 변수명Right는 작업 구역 오른쪽 아래 모서리의 X값, 변수명Bottom은 오른쪽 아래 모서리의 Y값을 내준다. 이 변수 설정 기능을 이용해서 단축 글쇠를 다음과 같이 변경했다.
^!a::
SysGet, Mon1, MonitorWorkArea
WinMove, A, , Mon1Left, Mon1Top, Mon1Right, (Mon1Bottom - Mon1Top) /2
return
^!s::
SysGet, Mon1, MonitorWorkArea
WinMove, A, , Mon1Left, (Mon1Bottom + Mon1Top) /2, Mon1Right, (Mon1Bottom - Mon1Top) /2
return
(여러 줄짜리 명령을 할 때면 저 return을 잊어서는 안 된다. 저걸 빼먹으면 다음 매크로까지 실행을 해서 피본다(..))
일견 복잡해지기는 했지만 논리적으로 생각하면 얼추 알 수 있다. Mon1은 모니터 속에서 작업 영역 좌표를 나타내는변수이다. 따라서 Ctrl+Alt+A를 하면 현재 창의 위치와 크기를 바꾸는데, 작업줄을 뺀 작업 영역의 왼쪽 위 꼭대기에서 시작해 가로는 작업 영역의 가로 길이와 같고, 세로는 작업 영역 세로 길이의 반인 창이 된다. 마찬가지로 Ctrl+Alt+S를 하면 작업 영역 왼쪽 가운데에서 시작해 가로는 작업 영역의 가로와 같고, 세로는 작업 영역 세로 길이의 반이 창이 된다. 해상도가 어떻든, 작업줄을 숨기든 보이든 마찬가지다. (모니터가 여러 대이면 문제가 될 수 있지만, 설명하기 귀찮으니 넘어간다.)

이런 결과가 된다
여기서 더 나아가 하나의 단축 글쇠로 여러 창을 한꺼번에 움직일 수도 있고 화면 3등분, 4등분, 여러 모니터에 걸친 디스플레이 등 아주 다양한 설정을 할 수 있다. 일단은 소박한 단축 글쇠로 만족하지만, 차차 알아가면서 이 단순하면서도 강력한 스크립트로 더욱 편리한 컴퓨터 생활을 하고 싶어진다.
필요한 분이 있다면 보시라고 오토핫키 스크립트 파일을 공개한다. 각자 프로그램은 다르니까 그대로 적용은 안 되겠지만, 스크립트가 전부 단순해서 부담없이 한 번 분석해볼 여지는 있다. (혹은 보고 비웃거나(..))
댓글을 달아 주세요