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 를 하고 다시 한글 상태로 복귀 시킵니다. 다음과 같이 사용하시면 됩니다. |