오토핫키 ime_check - otohaski 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)

}

● 특정 윈도우 (크롬)에만 사용하는 예제)

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 - otohaski 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) }

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 를 하고 다시 한글 상태로 복귀 시킵니다.

다음과 같이 사용하시면 됩니다.