这是输入法中,处理键盘消息的代码.我的目的是想让他在按空个是全角输出的.
BOOL WINAPI ImeProcessKey(HIMC hIMC,UINT vKey,LPARAM lKeyData,CONST LPBYTE lpbKeyState)
{
    BOOL fRet = FALSE;
    BOOL fOpen;
    BOOL fCompStr = FALSE;
    LPINPUTCONTEXT lpIMC;
    LPCOMPOSITIONSTRING lpCompStr;
static BOOL fPressOther = FALSE;
// static BOOL fFirst = TRUE; DebugLog(1,(DebugLogFile,"ImeProcessKey\n"));
    
    if ((lKeyData & 0x80000000) && vKey != VK_CONTROL)
        return FALSE;
       
if (!(lKeyData & 0x80000000) && vKey == VK_CONTROL)
return FALSE;
         
if (lpbKeyState[VK_MENU] & 0x80 ) return FALSE; if(vKey != VK_CONTROL && lpbKeyState[VK_CONTROL] & 0x80 ) {
fPressOther = TRUE;
return FALSE;
}    if (!(lpIMC = ImmLockIMC(hIMC)))
        return FALSE;
    fOpen = lpIMC->fOpen; if(vKey == VK_CONTROL && (lKeyData & 0x80000000) && !fPressOther){ // && !fFirst){

GENEMSG GnMsg; fPressOther = FALSE; if(fOpen) {
lpIMC->fOpen=FALSE;
MakeResultString(hIMC,FALSE);
}
else lpIMC->fOpen=TRUE; GnMsg.msg = WM_IME_NOTIFY;
GnMsg.wParam = IMN_SETOPENSTATUS;
GnMsg.lParam = 0;
GenerateMessage(hIMC, lpdwCurTransKey,(LPGENEMSG)&GnMsg);
return FALSE; } fPressOther = FALSE;    if (fOpen)
    {
        if (lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr))
        {
            if ((lpCompStr->dwSize > sizeof(COMPOSITIONSTRING)) && 
                (lpCompStr->dwCompStrLen))
                fCompStr = TRUE;
ImmUnlockIMCC(lpIMC->hCompStr);
        }  //#########
     if (wConversionMode & CONVERSION_SET_FULLSHAPE){

//if (lpbKeyState[VK_SHIFT] & 0x80)
    //{
//    if (fCompStr)
//     fRet = (BOOL)bComp[vKey];
// else
// fRet = (BOOL)bNoComp[vKey];
// }
// else 
// {
// if (fCompStr)
// fRet = (BOOL)bComp[vKey];
// else
// fRet = (BOOL)bNoComp[vKey];
// }

}
 //########
   
if (fCompStr)
fRet = (BOOL)bComp[vKey];
else
fRet = (BOOL)bNoComp[vKey];

}    ImmUnlockIMC(hIMC);
    return fRet;}