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

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

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

[프날 오토핫키] 여러 GUI창 다루기

오토핫키를 사용하면서 여러 개의 GUI 창을 다룰 일이 생깁니다.

레이블을 이용하여 쉽게 구현할 수 있는데, 첫 번째 파라미터에 레이블을 달아주어서 GUI를 구분할 수 있습니다.

 

먼저, 일반적인 GUI 생성 구문을 보겠습니다.

Gui, Add, edit, x20 y20 w150 h20 vEdit, 0
Gui, Add, button, x20 y60 w150 h20 gBtn, 눌러주세용
Gui, Show, w190 h100, Multiple GUI
a := 0
return

Btn:
a++
GuiControl,,Edit,%a%
return

GuiClose:
ExitApp

예제 1.ahk
0.00MB

버튼을 누르면 Edit의 내용이 1씩 증가하는 간단한 GUI입니다.

이렇게 우리는 지금까지 Gui 명령어 뒤에 Add나 Show같은 매개변수를 이용하여 컨트롤을 생성하고 창을 표시했습니다.

 

이러한 일반적인 구문에 레이블을 달아서 두 번째 GUI의 요소를 생성하고, 두 번째 GUI 창을 표시할 수 있습니다.

레이블을 다는 위치는 "첫 번째 매개변수"이고, 레이블 명은 자유롭게 써주시면 됩니다.

Gui, Add, edit, x20 y20 w150 h20 vEdit, 0
Gui, Add, button, x20 y60 w150 h20 gBtn, 눌러주세용
Gui, Show, w190 h100, 1번

Gui, 2:Add, edit, x20 y20 w150 h20 vEdit, 0
Gui, 2:Show, w190 h60, 2번

a := 0
return


Btn:
a++
GuiControl,,Edit,%a%
return


GuiClose:
ExitApp

예제 2.ahk
0.00MB

2번 창을 띄워보았습니다. Gui, 2:Add를 통해 두번째 창에 컨트롤을 만들었으며, Gui, 2:Show를 통해 두번째 창을 표시했습니다. (5번 줄, 6번 줄)

 

이때, 아무 레이블을 쓰지 않은 GUI가 "기본 GUI (Default GUI)"가 됩니다. "기본 GUI" 개념은 위 예제로 확인할 수 있는데요, 1번 GUI에서 버튼을 누르면 1번 창에 있는 Edit의 숫자만 증가됩니다. 1번 창 Edit와 2번 창 Edit의 v레이블이 같은데도 말이죠.

 

물론, GuiControl 구문도 우선 아까 말씀드렸다 싶이 레이블을 이용해 대상을 지정해 줄 수 있습니다.

GuiControl, 2:, Edit, %a%

위와 같이 말입니다. 위 예제에서 GuiControl 구문을 이걸로 바꾼 후 실행해보시면, 버튼을 누를 때마다 두 번째 창 Edit의 숫자가 바뀌는 것을 볼 수 있습니다.

 

그런데, 두 번째 GUI를 닫아도 프로그램이 종료되지 않습니다. GuiClose: 레이블 또한 "기본 GUI"에서만 작동하기 때문입니다. 만약 두 번째 GUI를 담당하는 GuiClose:를 만들고싶다면 앞에 레이블명을 써주시면 됩니다.

생성한 GUI의 레이블이 [2, Label, 두번째] 일 때...

2GuiClose:
LabelGuiClose:
두번째GuiClose:

 

아래 예제는 버튼을 누를 때마다 "첫번째 창 Edit의 숫자는 올라가고, 두 번째 창 Edit의 숫자는 내려가는 프로그램"입니다. 두 GUI 중 아무 창이나 닫으면 프로그램은 종료됩니다.

 

Gui, Add, edit, x20 y20 w150 h20 vEdit, 0
Gui, Add, button, x20 y60 w150 h20 gBtn, 눌러주세용
Gui, Show, w190 h100, 1번

Gui, 2:Add, edit, x20 y20 w150 h20 vEdit, 0
Gui, 2:Show, w190 h60, 2번

a := 0
b := 0
return

Btn:
a++
b--
GuiControl,,Edit,%a%
GuiControl,2:,Edit,%b%
return


2GuiClose:
GuiClose:
ExitApp

예제 3.ahk
0.00MB

 

여담 : 기본 GUI를 바꾸는 법

Gui, Default 구문을 사용하여 기본 GUI를 바꿀 수 있습니다.

역시 첫 번째 매개변수에 레이블을 사용하여 대상을 지정할 수 있습니다.

 

Gui, 2:Default

→ [2]라는 레이블을 가진 GUI를 기본 GUI로 설정

 

강좌에서는 편의상 두 번째 GUI의 레이블 명을 [2]로 통일했지만, 꼭 2가 아니어도 되며 영문이나 한글이어도 됩니다. "레이블"이니까요.