我想用钩子得到键盘输入的字符串。
键盘钩子只能得到英文字符,而且还是大写的。
怎么才能得到输入的中文?

解决方案 »

  1.   

    用WH_CALLWNDPROC的钩子截获WM_IME_COMPOSITION消息在钩子函数中:if(cs->message == WM_IME_COMPOSITION)//截获中文输入
    {
    if (((LPMSG)lParam)->lParam & GCS_RESULTSTR)
    {
    HIMC hIMC;
    DWORD dwSize;
    HGLOBAL hstr;
    LPSTR lpstr; hIMC = ImmGetContext(::GetFocus());
    dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, NULL, 0);
    dwSize += sizeof(WCHAR);
    hstr = GlobalAlloc(GHND,dwSize);
    lpstr = (LPSTR)GlobalLock(hstr);
    ImmGetCompositionString(hIMC, GCS_RESULTSTR, lpstr, dwSize); lstrcpy(szPlayText, lpstr); ImmReleaseContext(::GetFocus(), hIMC); }
    }