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

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

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

[프날 오토핫키] 사용자로부터 입력받은 키로 핫키 지정하기 (핫키 동적화)

#질문답변

 

안녕하세요.

 

오토핫키로 프로그램을 짜다보면 핫키를 사용자 지정으로 만들 때가 있습니다. 이와 관련된 질문이 들어와서, 설명이 질문답변란에 충분히 되지 않을 것 같아 별도 글로 이렇게 작성합니다.

 

Hotkey(v레이블명: HK) 컨트롤로 핫키를 입력받아서,
%HK%:: 로 핫키를 추가했는데 오류가 납니다

 

이런 질문인데, 이번 포스팅에선 핫키를 사용자 입력받는 방법에 대해서 간략하게 써보겠습니다.


 1. Hotkey 컨트롤 

 

GUI상에서 핫키를 입력받는덴 Hotkey 컨트롤이 필요합니다. 어렵게 생각할 것 없습니다. 강좌 본편에서 Button 컨트롤이나 Edit 컨트롤을 배운 것처럼, Hotkey 컨트롤이 별도로 있을 뿐입니다. 생긴건 Edit와 똑같이 생겼는데, 포커스를 둔 후 키를 입력하면 입력된 키가 표시됩니다. 예를 들어서 A키를 누르면 A가, Ctrl+A를 누르면 Ctrl+A가 표시되죠.

 

간단하게 아래처럼 테스트해볼 수 있습니다.

핫키 컨트롤을 넣고 Ctrl+A를 눌렀습니다. v레이블 변수에는 무엇이 담길까 뽑아보니, 오토핫키에서 Ctrl 조합키를 의미하는 ^ 기호와 함께 ^a로 표시된 것을 알 수 있습니다.

 

문제는 이렇게 입력받은 단축키를 어떻게 써먹을 수 있냐는 것이죠. %HK%:: 로 쓰면 될 것 같지만, 오류가 납니다. ::를 이용하여 핫키를 만들 경우 정적으로 미리 정해진 키만 핫키 지정을 할 수 있습니다.

 

그럴때 필요한 것이 핫키 동적화입니다.

 

 2. 핫키 동적화와 Hotkey 명령어 

프로그래밍에서, 미리 프로그래밍 해두고 그 흐름대로 동작되게 하는 방법은 '정적이다'라고 표현합니다. 반대로 상황에 맞게 무언가 추가되는 모습을 '동적이다'라고 표현합니다. 예를 들어서, GUI가 로딩될 때 버튼이 1개만 있었고, 이 버튼이 프로그램이 종료될때까지 사라지지 않는 모습은 정적입니다. 반대로 GUI가 로딩될 땐 버튼이 없지만, GUI가 로딩된 후 사용자 입력이나 조건에 따라 버튼이 추가되는 모습은 동적입니다.

 

우리는 핫키를 동적화할것입니다. 그러니까, 정해지지 않은 핫키를 추후에 추가하겠다는 뜻입니다. 이를 위해선 Hotkey 명령어를 알아야합니다.

Hotkey, KeyName[, Label, Options]

다시 초심으로 돌아가서 매개변수 분석을 해보죠. 필수 매개변수는 1개, 선택 매개변수는 2개입니다. 명령어는 hotkey가 되겠네요. https://pnal.kr/3 에서 매개변수 분석 방법에 대해 복습할 수 있습니다.

 

아무튼, 이 명령어는 핫키를 동적으로 추가하는데 사용합니다. 다른 목적으로도 사용되지만 그걸 강좌하는 것은 아니므로 생략하겠습니다.

 

KeyName 매개변수는 핫키로 지정할 키 이름을 적어주시면 되고, Label은 핫키가 눌렸을 때 이동할 레이블입니다.

눈치 채셨나요? 이 명령어를 사용하면 KeyName에 적힌 핫키를 눌렀을 때, Label 레이블로 이동합니다. Options 매개변수는 생략합니다.

 

마치 G레이블같죠? 따라서 우리가 하고자 하는 것은 아래와 같이 쓸 수 있겠습니다.

F1키를 누르면 hotkey 컨트롤의 내용을 가져와서 핫키가 동적으로 추가됩니다.(9번째 줄)

그 후엔 추가된 핫키를 누르면 HKpressed 레이블로 이동되어 스크립트가 실행되겠군요 (13번째 줄)

7번째 줄의 조건문은 Hotkey 컨트롤에 아무것도 입력되지 않았을 때에 빈 키로 핫키를 추가하는 시도를 해서 오류가 나는 경우가 있기에 이를 해결하고자 넣었습니다. (질문자분도 넣어야합니다.)

 

핫키 컨트롤.ahk
0.00MB

 

저는 이 예제에서 F1키를 누르지 않고도,
등록된 키를 바로바로 핫키로 썼으면 좋겠어요

 

이런 경우에는 드리고 싶은 말씀이 있습니다. 프로그램 디자인적인 측면에서 이는 좋은 디자인이 아닙니다. 왜냐하면 이렇게 구현할 경우 핫키가 정상적으로 지정되었음을 사용자에게 알려줄 수단이 없기 때문이죠. 

물론, 핫키 등록 시 GUI에서 핫키 컨트롤의 배경색이 변한다던가.. Disabled 처리가 된다던가 하는 식으로 사용자에게 명확히 알려주면 문제 없습니다. 그러나 가장 확실한 방법은 사용자가 '핫키 적용' 버튼을 누르게 하는 것이지요.

 

아무튼, 이렇게 구현을 하고 싶으시면 핫키 컨트롤에 g레이블을 달아보세요. 핫키 컨트롤의 내용이 바뀔 때마다 g레이블로 이동되어 스크립트가 실행될 것입니다. 따라서 g레이블로 이동된 서브루틴에 위 예시 스크립트의 핫키 적용 부분을 넣으면 되겠죠.

 

아무튼, 이런 방법으로 핫키를 동적화 할 수 있습니다. (=사용자로부터 입력받은 키를 핫키로 지정할 수 있습니다.)

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

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