프날 오토핫키 강좌
누르면 강좌 리스트가 나와요
프날 오토핫키 강좌

📣 더 깊은 내용이 담긴 '프날 오토핫키 강좌 v2'의 서적판이 공개되었습니다.

가장 최신의 오토핫키를 담은 '프날 오토핫키 강좌 v2'를 책으로 만나보세요! v2 페이지에 공개된 분량보다 더욱 깊은 내용을 처음이라도 괜찮아, 오토핫키 프로그래밍을 통해 배울 수 있습니다. 전국 온/오프라인 서점에서 만나요!
책 더 알아보기 및 구매하기 

[오토핫키] 핫키 조건화 (해시 접두어)

#질문답변

 

오토핫키는 강력한 리매핑 기능이 특징인 스크립트 언어입니다. 본 강좌 본편에선 프로그래밍 언어로서의 오토핫키를 강좌하게 되어 키 리매핑에 관련된 부분은 생략이 되었습니다. 물론, 본편 강좌 내용만으로 키 리매핑 기능을 만들 수 있긴 합니다만(모든 기능은 순차, 반복, 조건의 형태로 만들어지기 때문입니다.) 여러 사소한 문제들을 해결하기 위해 시간을 좀 쏟아야 합니다.

 

a::
Send, {b}

프날 오토핫키 강좌를 보셨다면 위와 같은 리매핑 방식이 가장 먼저 생각났을 것입니다. a키를 입력시 b를 입력하게 되는 것이지요. 그런데 오토핫키는 키 리매핑을 위한 간단한 방식을 지원합니다. 아래와 같이 리매핑할 키를 한 줄로 적어주는 방법입니다.

a::b

이렇게 쓰면 첫번째 방법처럼 썼을 때 생기는 문제 대부분이 해결됩니다. 예를 들어서, 해당 방식으로 썼을 시 와일드카드 문제가 해결되어 어떤 조합키를 쓰더라도 [조합키+리매핑된 키]의 입력이 들어가게 됩니다. 일반적인 핫키에선 와일드카드 접두사(*)를 적어주었어야 합니다. (강좌 내용은 아니었습니다.) 또 모든 조합키의 입력을 여과없이 받아들일 수 있도록 {Blind} 키워드를 붙여주어야 하는데, 이 방법대로라면 {Blind} 키워드를 붙이지 않아도 됩니다. 즉, 아래 두 구문은 같은 기능을 하지만 후자가 더 간편해보이죠.

*a::
Send, {Blind}{b}
a::b

(참고로, 후자의 방법은 한 줄만 실행하고 자동으로 스크립트가 중지되기 때문에 return이 필요 없습니다.)


이번에 들어온 질문은 특정 창에서만 키 리매핑을 시키는 방법입니다.

 

프날에선 창과 관련된 명령어가 몽땅 빠졌지만, WinActive() 함수에 대해 간단히 설명하자면 창이 활성화 되어있다면 창의 핸들값을 반환하고, 그렇지 않다면 0을 반환하는 함수입니다. 오토핫키에서 if() 문은 0 혹은 빈 값이 아닌 경우 모두 true 취급을 하기 때문에, 창이 활성화 되어있는지 여부를 if문으로 체크할 수 있게 됩니다.

 

여기까지만 들었을 때, 위에서 언급한 '복잡한 방법'대로 스크립트 작성 시 if문과 WinActive()함수를 이용해서 처리를 해주는 방법을 떠올릴 수 있을 것입니다. 아래와 같이 말입니다.

*a::
if (WinActive("창 타이틀"))
    Send, {Blind}{b}
else
    Send, {Blind}{a}

"창 타이틀"이라는 타이틀을 가진 창이 활성화 되어있다면 b로 리매핑하고, 아니라면 a를 그대로 입력하는 구문입니다.

 

그런데 너무 복잡합니다. 심지어 리매핑을 위한 '간단한 구문'은 위와 같이 if문을 쓰기에 제약이 있습니다. (한 줄로 끝나야 하니까요) 그래서 핫키와 핫스트링의 바로 윗줄에는 이를 위한 "#(해시)" 접두어를 지원합니다. 

 

#if (조건)
a::b

해시 접두어는 위와 같이 사용합니다. 앞에 해시 기호를 이용하여 if문을 작성해주면, 바로 아래줄의 핫키/핫스트링을 조건화할 수 있습니다. 조건이 참일때만 아래 핫키 동작을 한다는 것이지요. 키 리매핑도 마찬가지입니다.

 

즉, 이와 WinActive를 결합해주면

#if (WinActive("창 타이틀"))
a::b

처럼 쓸 수 있습니다.

 

사실 이러한 방법은 스크립트의 대원칙인 "별도 지시가 없으면 위에서 아래로 진행된다"에 위배됩니다. 반복문으로 위로 올려진 것도 아니면서, 핫키 촉발 시 바로 윗줄부터 진행한다는 점은 크나큰 모순이 아닐 수 없습니다. 그러나 이는 오토"핫키"라는 이름에 걸맞게 핫키 기능(과 그로부터 파생된 핫스트링, 키 리매핑)을 더욱 유연하게 지원하기 위한 소소한 일탈에 가깝습니다.

 

이와 같이 해시 접두어를 통해 핫키를 조건화해보세요.

⚠ 이 강좌는 오토핫키 v1을 다룹니다

지금 보시는 강좌는 구버전 오토핫키(v1.1)를 다루고 있습니다. 따라서 본 강좌의 내용은 현재 최신 오토핫키 버전 (v2.0)과 호환되지 않습니다. 구버전의 정보가 필요한 것이 아니라면, 가능한 한 새로운 사이트에 작성한 v2 강좌(https://ahkv2.pnal.dev)를 봐주시길 바랍니다.