Post

esc 키를 누를 시 자동 영문 전환 (Windows)

목차


들어가기에 앞서…

해당 방법은 auto hotkey를 사용하는 방법이기에 윈도우에서만 동작합니다.
Windows가 아닌 다른 OS에서 사용하고 싶으시다면 뒤로가기를 눌러 주십시오.


준비

auto hotkey
오토핫키 설치가 필요합니다.
오토핫키는 여기서 다운받을 수 있습니다


스크립트 작성

아래 스크립트 작성

필자는 vim을 사용할 때 ctrl + space 키를 esc 키로 매핑하여 사용하고 있기에
ctrl + space 키 또한 누를 경우 한/영 상태를 체크하는 코드를 추가하였다.
만약 ctrl + [ 를 주로 사용하는 사용자라면 ^Space 대신 ^[를 추가한다.

동작 방식은 A를 눌러 눌러진 A가 A인지 확인하고 영문 A가 아닐 경우 한/영키를 눌러 전환한다.

아래 코드를 복붙하여 사용 (파일명은 esc_force_english.ahk 로 지정하였음)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
; shift+space = underbar (_)
; +Space::
; 	Send, _
; 	return

; ^[::
; ^Space::
;     ret := IME_CHECK("A")
;     if %ret% <> 0           ; 1 means IME is in Hangul(Korean) mode now.
;         {
;             ; MsgBox, 0, test, test1, ]
;             Send, ^
;             Send, ^
;             Send, {vk15}    ;한글인 경우 Esc키를 입력하고 한영키를 입력해 준다.
;             Sleep, 5
;             Send, {Esc}
;         }
;     else if %ret% = 0       ; 0 means IME is in English mode now.
;         {
;             ; MsgBox, 0, test, test2, ]
;             Send, ^
;             Send, ^
;             Send, {Esc}     ;영문인 경우 Esc키만 입력한다.
;         }
;     return
;
; ; IME check


$Esc::
    ret := IME_CHECK("A")
    if %ret% <> 0           ; 1 means IME is in Hangul(Korean) mode now.
        {
            Send, {vk15}    ;한글인 경우 Esc키를 입력하고 한영키를 입력해 준다.
            Sleep, 10
            Send, {Esc}
        }
    else if %ret% = 0       ; 0 means IME is in English mode now.
        {
            Send, {Esc}     ;영문인 경우 Esc키만 입력한다.
        }
    return

; IME check


IME_CHECK(WinTitle) {
	WinGet,hWnd,ID,%WinTitle%
	Return Send_ImeControl(ImmGetDefaultIMEWnd(hWnd),0x005,"")
}
Send_ImeControl(DefaultIMEWnd, wParam, lParam) {
	DetectSave := A_DetectHiddenWindows
	DetectHiddenWindows,ON
	SendMessage 0x283, wParam,lParam,,ahk_id %DefaultIMEWnd%
	if (DetectSave <> A_DetectHiddenWindows)
		DetectHiddenWindows,%DetectSave%
	return ErrorLevel
}
ImmGetDefaultIMEWnd(hWnd) {
	return DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hWnd, Uint)
}

Send, {Esc} 이후 Send, {vk15}를 누르게 되면 알 수 없는 오류가 발생하여
한영키가 눌러지는 시점을 esc보다 앞당겼다.

또한 한영키를 누르고 대기 시간을 주지 않을 경우 한영전환이 안되는 경우가 있어
sleep 타임을 주어 해결하였다.


윈도우 시작 시 자동실행

  1. Win+R 눌러 실행창 진입
  2. shell:startup 입력 후 엔터
  3. 생성한 esc_force_english.ahk 파일을 해당 폴더로 이동
  4. 동작 확인
This post is licensed under CC BY 4.0 by the author.