오토핫키 현재 언어 감지 한영 자동 전환

아래 코드를 넣으면 현재창 한영키를 감지하는 기능이 활성화됨.

이하 등장하는 모든 스니펫들을 사용하기 위해선 ↓ 이 코어가 장착 돼 있어야 함.

; IME vk15sc138 core
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)
}

한영키 전환을 발동시킬 파트에 ↓ 아래 코드를 삽입하면 된다, 즉발하려면 그냥 쭉 같이 붙여 넣으면 됨

; Always en
WinGetActiveTitle, ExplorerTitle
ime_status := % IME_CHECK("A")
if (ime_status != "0") {
	SendInput,{vk15sc138}
}

↑ 코드는 현재 키보드 언어 상태를 감지해 한글일 시 SendInput,{vk15sc138}를 눌러 항상 영어로 바꾸는 것.

응용하면 영어로만 작동해야 하는 대부분의 경우 강제 영어상태 전환, 현재 언어에 따라 다른 메시지를 출력 등 굉장히 유용.

↓ 아래 예제처럼 코딩한다면 우클릭시 항상 영어로 바뀌게 강제해 컨텐스트 메뉴의 단축키를 누를때 한글이 입력돼서 개빡치는 상황을 막아줌.

; Always en . Rbutton . hardfilter.com
~Rbutton::
WinGetActiveTitle, ExplorerTitle
ime_status := % IME_CHECK("A")
if (ime_status != "0") {
	SendInput,{vk15sc138}
}
return

↑ 코드가 이 글의 핵심이라고 해도 좋을 정도로 유용한 스니펫.

크롬에서 textarea 에 마우스 우클릭 'Inspect(요소 검사)' 사용시 개발자도구 안 열리고 '' 나오는 빡침을 겪어본 사람이면 감사인사 올릴 정도.

↓ 아래처럼 상용구 기능과 조합해 응용하면, 한글일 경우에만 오타를 교정하는 코드도 작성 가능함.

; ㅗㅋ드 - {space}코드 . hardfilter.com
:*?cB0: hzem::
WinGetActiveTitle, ExplorerTitle 
ime_status := % IME_CHECK("A") 
if (ime_status = "0") { 
} else { 
SendInput,{bs 4}코드
}
return

↑ ' ㅗㅋ드' 입력을 상용구로 등록해 즉각적으로 ' 코드' 로 바꿔주는 것.

이 오타 교정 기능은 오타 경우의수를 직접 등록해줘야 하는 점을 제외하면 마찬가지로 어마어마하게 유용함.

경우의 수를 일일히 지정해야 하는 것을 반대로 활용해 커스텀 조합 상용구를 만드는 장점이 될 수도 있음.

↓ 아래처럼 코딩하면 현재 언어가 영어면 영어로 나오고, 한글이면 한글로 나오는 간단한 예제

$f1::
WinGetActiveTitle, ExplorerTitle
ime_status := % IME_CHECK("A")
if (ime_status = "0") {
	SendInput,Hello world
} else {
	SendInput,안녕 로봇
}
return