天天看點

切換輸入法半角全角(打開關閉輸入法)

 #include   "winuser.h"  

  #include   "imm.h"  

  #pragma   comment(lib,"imm32")  

  HKL   hKL[2];  

  HKL   hCurKL;  

  hCurKL=GetKeyboardLayout(0);       //儲存初始輸入法  

  GetKeyboardLayoutList(2,hKL);     //擷取輸入法清單,隻擷取兩項  

  void   CIMESampleDlg::OnSetfocusEdit1()    

  {  

  //   TODO:   Add   your   control   notification   handler   code   here  

  if(hCurKL==hKL[0])     hCurKL=hKL[1];     //選擇第一種輸入法  

          ActivateKeyboardLayout(hCurKL,KLF_SUBSTITUTE_OK);       //切換輸入法  

  HIMC   hIMC;  

  DWORD   dwConv,   dwSent;  

  hIMC=ImmGetContext(m_hWnd);  

  ImmGetConversionStatus(hIMC,&dwConv,&dwSent);  

  if((dwConv   &   IME_CMODE_LANGUAGE)   !=   IME_CMODE_NATIVE)  

  {  

  dwConv   &=   ~IME_CMODE_LANGUAGE;  

  dwConv   |=   IME_CMODE_NATIVE;           //中文輸入狀态  

  }

  //标注1

  if   (!(dwConv   &   IME_CMODE_FULLSHAPE))     dwConv   |=   IME_CMODE_FULLSHAPE;     //全角  

  if   (!(dwConv   &   IME_CMODE_SYMBOL))           dwConv   |=   IME_CMODE_SYMBOL;           //中文标點  

  //标注2

  //若要切換輸入法為半角,隻需把上面的标注1判斷改為如下即可(自己用到時有此要求,是以在原作者繼承上自己改了下)

  if (dwConv & IME_CMODE_FULLSHAPE)

         dwConv &= ~IME_CMODE_FULLSHAPE;

  if (dwConv & IME_CMODE_SYMBOL)

         dwConv &= ~IME_CMODE_SYMBOL;

  ImmSetConversionStatus(hIMC,dwConv,dwSent);  

  ImmReleaseContext(m_hWnd,hIMC);  

  }  

  void   CIMESampleDlg::OnKillfocusEdit1()    

  {  

  //   TODO:   Add   your   control   notification   handler   code   here  

  hCurKL=GetKeyboardLayout(0);               //儲存現有的輸入法  

  ActivateKeyboardLayout(hKL[0],KLF_SUBSTITUTE_OK);         //關閉輸入法  

  }  

文章轉自: http://topic.csdn.net/t/20030926/14/2303213.html

---(下面是自己添加的)------------------------------------------------------------------------------------

同樣對于日文輸入法而言,可以通過上面的方法進行全半角切換,不過還有個前提:上面的方法需要打開IME才行,因為在“直接入力”(Direct Input)狀态上面的方法不能切換全半角等狀态,如果需要由“直接入力”(Direct Input)切換到其他如"ひらがな"等狀态,需要通過::ImmSetOpenStatus(hImc, TRUE);打開IME,同樣如果想由其他狀态切換到“直接入力”(Direct Input),隻需::ImmSetOpenStatus(hImc, FALSE);即可

繼續閱讀