BOOL GenerateMessage(HIMC hIMC, LPDWORD lpdwTransKey,LPGENEMSG lpGeneMsg) { LPINPUTCONTEXT lpIMC; if( (lpIMC = ImmLockIMC(hIMC)) == NULL ) return FALSE; if (lpdwTransKey){ ImmUnlockIMC(hIMC); return GenerateMessageToTransKey(lpdwTransKey,lpGeneMsg); } if (IsWindow(lpIMC->hWnd)) { LPDWORD lpdw; if (!(lpIMC->hMsgBuf = ImmReSizeIMCC(lpIMC->hMsgBuf, sizeof(DWORD) * (lpIMC->dwNumMsgBuf +1) * 3))) return FALSE; if (!(lpdw = (LPDWORD)ImmLockIMCC(lpIMC->hMsgBuf))) return FALSE; lpdw += (lpIMC->dwNumMsgBuf) * 3; *((LPGENEMSG)lpdw) = *lpGeneMsg; ImmUnlockIMCC(lpIMC->hMsgBuf); lpIMC->dwNumMsgBuf++; ImmGenerateMessage(hIMC); } ImmUnlockIMC(hIMC); return TRUE; }
static void GenerateIMEMessage(HIMC hIMC, UINT msg, WPARAM wParam, LPARAM lParam) { LPINPUTCONTEXT lpIMC; LPTRANSMSG lpTransMsg; lpIMC = LockRealIMC(hIMC); if (lpIMC == NULL) return; lpIMC->hMsgBuf = ImmReSizeIMCC(lpIMC->hMsgBuf, (lpIMC->dwNumMsgBuf + 1) * sizeof(TRANSMSG)); if (!lpIMC->hMsgBuf) return; lpTransMsg = ImmLockIMCC(lpIMC->hMsgBuf); if (!lpTransMsg) return; lpTransMsg += lpIMC->dwNumMsgBuf; lpTransMsg->message = msg; lpTransMsg->wParam = wParam; lpTransMsg->lParam = lParam; ImmUnlockIMCC(lpIMC->hMsgBuf); lpIMC->dwNumMsgBuf++; ImmGenerateMessage(RealIMC(hIMC)); UnlockRealIMC(hIMC); }
HRESULT WeaselIME::_AddIMEMessage(UINT msg, WPARAM wp, LPARAM lp) { if(!m_hIMC) return S_FALSE; LPINPUTCONTEXT lpIMC = (LPINPUTCONTEXT)ImmLockIMC(m_hIMC); if(!lpIMC) return E_FAIL; HIMCC hBuf = ImmReSizeIMCC(lpIMC->hMsgBuf, sizeof(TRANSMSG) * (lpIMC->dwNumMsgBuf + 1)); if(!hBuf) { ImmUnlockIMC(m_hIMC); return E_FAIL; } lpIMC->hMsgBuf = hBuf; LPTRANSMSG pBuf = (LPTRANSMSG)ImmLockIMCC(hBuf); if(!pBuf) { ImmUnlockIMC(m_hIMC); return E_FAIL; } DWORD last = lpIMC->dwNumMsgBuf; pBuf[last].message = msg; pBuf[last].wParam = wp; pBuf[last].lParam = lp; lpIMC->dwNumMsgBuf++; ImmUnlockIMCC(hBuf); ImmUnlockIMC(m_hIMC); if (!ImmGenerateMessage(m_hIMC)) { return E_FAIL; } return S_OK; }
static void GenerateIMECHARMessages(HIMC hIMC, LPWSTR String, DWORD length) { LPINPUTCONTEXT lpIMC; LPTRANSMSG lpTransMsg; DWORD i; if (length <= 0) return; lpIMC = LockRealIMC(hIMC); if (lpIMC == NULL) return; lpIMC->hMsgBuf = ImmReSizeIMCC(lpIMC->hMsgBuf, (lpIMC->dwNumMsgBuf + length) * sizeof(TRANSMSG)); if (!lpIMC->hMsgBuf) return; lpTransMsg = ImmLockIMCC(lpIMC->hMsgBuf); if (!lpTransMsg) return; lpTransMsg += lpIMC->dwNumMsgBuf; for (i = 0; i < length; i++) { lpTransMsg->message = WM_IME_CHAR; lpTransMsg->wParam = String[i]; lpTransMsg->lParam = 1; lpTransMsg ++; } ImmUnlockIMCC(lpIMC->hMsgBuf); lpIMC->dwNumMsgBuf+=length; ImmGenerateMessage(RealIMC(hIMC)); UnlockRealIMC(hIMC); }