切换输入法半角全角(打开关闭输入法)

 #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);即可

你可能感兴趣的:(input,输入法,include)