Autohotkey를 사용하다 보면
바람의나라가 아닌 editor, 인터넷, 카톡 등 매크로가 동작하지 말아야 하는 곳에서
"5555555", "/딜 파력무참"
이렇게 떠서 당황하는 경우가 생길 겁니다.
Suspend 혹은 ExitApp과 같은 command를 통해서
hotkey를 중단 시킬 수 있습니다.
라고 끝내면 안되겠죠?
사람 인지라 깜빡하는 경우가 생기기 마련이잖아요?
너무 불편하지 않나요?
프로그램 이름이
단순 "keymacro"도 아니고
무려 "Autohotkey" 인데
설마 window를 왔다 갔다 할 때마다
Hotkey를 수동으로 enable/disable 해줘야 한다면
이름값을 하지 못하는 프로그램이지 않을까요?
그래서 autohotkey가 키매크로와 다르게
그 이름값을 한다는 것을 보여드리려고 합니다.
지정한 hotkey들이 바람의나라 창이 활성화 되어 있을 때만 동작하고
그렇지 않을 떄는 hotkey가 동작하지 않게 하려고 합니다.
v1.1
#IfWinActive 바람의 ; 바람의나라 창이 활성화 상태일 때
PgUp::SetTimer, Heal, 70 ; 70ms 마다 자동기원 반복
PgDn::SetTimer, Heal, off ; 자동기원 반복 종료
#IfWinActive ; 여기까지
#IfWinNotActive 바람의 ; 바람의나라 창이 활성화되지 않았을 때
PgUp::SetTimer, Heal, off ; 자동기원 반복 종료
PgDn::SetTimer, Heal, off ; 자동기원 반복 종료
#IfWinActive ; 여기까지
v2.0
#HotIf WinActive("바람의") ; 바람의나라 창이 활성화 상태일 때
PgUp::SetTimer(Heal, 70) ; 70 ms 마다 자동기원 반복
PgDn::SetTimer(Heal, 0) ; 자동기원 반복 종료
#HotIf ; 여기까지
#HotIf !WinActive("바람의") ; 바람의나라 창이 활성화되지 않았을 때
PgUp::SetTimer(Heal, 0) ; 자동기원 반복 종료
PgDn::SetTimer(Heal, 0) ; 자동기원 반복 종료
#HotIf ; 여기까지
#ifWinActive <window title>
#ifWinActive
사이에 지정된 hotkey들은
<window title>에 해당하는 window가 활성화 되었을 때만
동작하게 끔 구분하는 구문입니다.
#ifWinNotActive <window title>
#ifWinNotActive
사이는 그 반대겠죠?
이런 식으로 바람의나라 창 안에서만 동작할 hotkey와
다른 창에서 동작할 hotkey들을 구분 할 수 있습니다.
이렇게 하면 따로 suspend 여부를 신경 쓰지 않아도
원하는 hotkey가 원하는 곳에서만 동작하는
안정적인 "'Auto'hotkey" 를 쓰실 수 있습니다.
--------------------------------------------------------------------------------------
그런데 여기서 짚고 넘어가야 하는 부분이 하나 더 있습니다.
바람의나라 창 제목은 분명
인데, 왜
"바람의"
까지만 적어도 동작하는가? 라는 의문이 남아있죠.
이 내용은 SetTitleMatchMode와 관련 있고
다음과 같은 Mode들이 있습니다.
1. 창 제목이 지정된 WinTitle로 시작하는지 확인
(전방 일치)(빠름)
2. 창 제목 어디든 WinTitle이 포함되어 있는지 확인
(중간 일치)
3: 창 제목이 정확하게 WinTitle과 일치하는지 확인
(완전 일치)
기본적으로 SetTitleMatchMode는 1로 설정되어 있습니다.(v1.1)
(v2.0은 기본값이 2)
따라서 WinTitle의 앞 부분만 맞춰주면 되기 때문에
"바람의"
까지만 적어줘도 잘 동작하게 됩니다.
바꾸고 싶은 경우 이렇게 바꿀 수 있습니다.