none
현재 IME 모드 (한/영 모드) 상태 확인방법 문의드립니다. (C#)

    질문

  • 안녕하세요. 키 이벤트 훅킹 루틴을 작성중입니다.

    인터넷익스플로러(iexplorer), 파일탐색기가 선택된 상태에서 IME 모드를 확인할 수 없어 문의드립니다.

    다른 프로그램이 선택된 상태에서는 IME 모드를 아래 코드로 확인할 수 있습니다.

    선택된 윈도우(ForegroundWindow) 가 인터넷익스플로러 또는 파일매니저 일 경우에만, 

    "SendMessage((IntPtr)hIME, WM_IME_CONTROL, new IntPtr(0x0001), new IntPtr(0));" 리턴값이 0입니다.

    해결방법 아시는 분 도움부탁드립니다.

            private string GetIMEMode()
            {
                if (mCurrentWindowHandle == (IntPtr)null)
                {
                    mCurrentWindowHandle = GetForegroundWindow();
                }
    
                IntPtr hIME = ImmGetDefaultIMEWnd(mCurrentWindowHandle);
                IntPtr status = SendMessage((IntPtr)hIME, WM_IME_CONTROL, new IntPtr(0x0005), new IntPtr(0));
                IntPtr conv = SendMessage((IntPtr)hIME, WM_IME_CONTROL, new IntPtr(0x0001), new IntPtr(0));
                if ((status.ToInt32() != 0) && ((conv.ToInt32() & IME_CMODE_HANGUL) == IME_CMODE_HANGUL))
                {
                    return "한글";
                }
                else
                {
                    return "영어";
                }
    
            }

    2018년 2월 12일 월요일 오전 8:26