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)
}
● 특정 윈도우 (크롬)에만 사용하는 예제)
ret := IME_CHECK("ahk_exe chrome.exe") ; 크롬 윈도우의 입력모드를 가져온다.
if (ret = 1) ; 한글입력 모드라면, (0이면 영문, 1이면 한글)
{
Send, {vk15sc138} ; 한영키를 눌러 영문입력 모드로 전환
;MsgBox, 0, , 한글입력 모드, 1
}
else
{
;MsgBox, 0, , 영문입력 모드, 1
}
● 모든 윈도우에 적용하는 예제)
WinGetActiveTitle, 변수이름 ; 현재 활성화된 윈도우의 타이틀을 가져온다.
ret := IME_CHECK(변수이름) ; 윈도우의 입력모드를 가져온다.
if (ret = 1) ; 한글 입력 모드라면, (0이면 영문, 1이면 한글)
{
Send, {vk15sc138} ; 한영키를 눌러 영문입력 모드로 전환
;MsgBox, 0, , 한글입력 모드, 1
}
else
{
;MsgBox, 0, , 영문입력 모드, 1
}
질문
오토핫키 질문 좀 드리겠습니다 완전 초보입니다.
if IME_CHECK("A") // 현재 활성화된 창의 입력 모드가 영어라면
Send, {vk15sc138} // 한영 전환 키 누름
Send, {o} // o 누름
이것을
현재 활성화된 창의 입력모드가 한글이라면
한영 전환 키 누름
이렇게 바꾸려고 하는데 if IME_CHECK("A") 이 부분을 어떻게 바꾸어야 하나요?
답변 주시면 너므너므 감사하겠습니다.
답변1개
1번째 답변
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) }
WinGetActiveTitle, ExplorerTitle ime_status := % IME_CHECK("A") if (ime_status = "0") { } else { Send, {vk15sc138} }
"0"의 의미: 한/영 상태가 "A"
"1"의 의미: 한/영 상태가 "한"
즉,
한/영 상태가 A(영문)일 때, 아무것도 안 함
한/영 상태가 A(영문)이 아닐 때, 한영키 누름
알아두세요!
위 답변은 답변작성자가 경험과 지식을 바탕으로 작성한 내용입니다. 포인트로 감사할 때 참고해주세요.
2020.07.25.
Autohotkey 를 사용하여 영문 Send 를 할 때~ 한/영 자판의 상태에 따라 영문이 들어가기도 하고 한글이 들어가기도 합니다.
재수 좋게 영문으로 되어 있는 상태에서 send 를 한다면 정상적으로 동작하겠지만 한글로 된 상태에서 send 를 한다면 한글로 이상하게 들어가는 경우가 발생을 합니다.
예를 들어 아래 명령어를 메모장과 같은 에디터에서 한글 상태에서 실행한다면~ "며새ㅙ사됴" 로 나오게 될 겁니다.
Autohotkey 를 사용하여 한영 자판에 상태를 확인할 수 있는 방법을 검색 하다 보니 아래 주소에 그 해결 방법이 나오더군요.
역시나 내가 생각하는 대부분의 문제들은 이미 누군가가 해결 해 놓은 경우가 많다는걸 다시 한번 느낍니다.
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)
}
위 함수를 사용하여 현재 실행되는 프로그램의 한영상태를 확인하는 코드는 아래와 같습니다. 한글이면 1 영문이면 0이 나옵니다.
위 함수를 사용하여 다음과 같이 한/영 상태에 따라 적절히 send 하는 명령어를 만들 수가 있습니다.
한글 상태이면 영어로 바꿔 준 후에 send 를 하고 다시 한글 상태로 복귀 시킵니다.
다음과 같이 사용하시면 됩니다.