HOOK截获中文输入会出现响应多次的情况

HOOK截获中文输入会出现响应多次的情况。 
当在Word中输入“你好” 记录下来的结果变成了"你好你好你好你好" 实在不解。。代码如下 



    case WM_IME_COMPOSITION:   
  
//MessageBox(NULL, "ImmGetContext3", "ImmGetContext3", MB_OK);   
  
//if   (m_hEditWnd   ==   pmsg->hwnd)   
  
{   
  
             HIMC hIMC;   
  
             HWND hWnd=pmsg->hwnd;   
  
             DWORD dwSize;   
  
             //char ch;   
  
                
  
             if(pmsg->lParam & GCS_RESULTSTR)   
  
             {   
  
                 //先获取当前正在输入的窗口的输入法句柄   
  
                 hIMC = ImmGetContext(hWnd);   
  
                 if (!hIMC)   
  
                 {   
  
                     MessageBox(NULL, "ImmGetContext", "ImmGetContext", MB_OK);   
  
                 }   
  
  
  
                 // 先将ImmGetCompositionString的获取长度设为0来获取字符串大小.   
  
                 dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, NULL, 0);   
  
  
  
                 // 缓冲区大小要加上字符串的NULL结束符大小,   
  
                 //   考虑到UNICODE   
  
                 dwSize += sizeof(WCHAR);   
  
  
  
                 memset(lpstr, 0, 20);   
  
  
  
                 // 再调用一次.ImmGetCompositionString获取字符串   
  
                 ImmGetCompositionString(hIMC, GCS_RESULTSTR, lpstr, dwSize);   
  
  
  
                 //现在lpstr里面即是输入的汉字了。你可以处理lpstr,当然也可以保存为文件...   
  
                 //MessageBox(NULL, lpstr, lpstr, MB_OK);    
  
        //SaveLog(lpstr);   
  
        FILE* f1;   
  
        f1=fopen("c:\\report_cn.txt","a+");   
  
        //char ch1;   
  
        //ch1=(char)(pmsg->wParam);   
  
        fwrite(lpstr,_tcslen(lpstr),1,f1);   
  
        fclose(f1);   
  
  
  
                 ImmReleaseContext(hWnd, hIMC);   
  
             }   
  
         }   
  
         break;  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值