/**************************************************************************** IMMSYS.CPP Owner: cslim Copyright (c) 1997-1999 Microsoft Corporation Load/Unload IMM Apis dynamically not link with imm32.lib Inlcude Immdev.h and Indicml.h History: 14-JUL-1999 cslim Copied from KKIME2001 source tree *****************************************************************************/ #ifndef UNDER_CE // Windows CE does not use private way. /* -- IMMSYS support as following APIs -- OurImmSetOpenStatus OurImmGetOpenStatus OurImmGetContext OurImmGetConversionStatus OurImmSetConversionStatus OurImmSetStatusWindowPos OurImmConfigureIMEA OurImmEscapeA OurImmNotifyIME OurImmLockIMCC OurImmReSizeIMCC OurImmUnlockIMCC OurImmGetIMCCSize OurImmGenerateMessage OurImmLockIMC OurImmUnlockIMC // OurImmRequestMessageW: Commented becuase used only by KK IME(Reconversion, document feed) OurImmGetDefaultIMEWnd OurImmGetIMEFileNameA OutImmIsIME() ----------------------------------------*/ #define LIBNAME TEXT("imm32.dll") #include "precomp.h" typedef BOOL(WINAPI* FPOurImmSetOpenStatus)(HIMC hIMC, BOOL fOpen); typedef BOOL(WINAPI* FPOurImmGetOpenStatus)(HIMC hIMC); typedef HIMC(WINAPI* FPOurImmGetContext)(HWND hWnd); typedef BOOL(WINAPI* FPOurImmGetConversionStatus)(HIMC hIMC, LPDWORD pdwConv, LPDWORD pdwSent); typedef BOOL(WINAPI* FPOurImmSetConversionStatus)(HIMC hIMC, DWORD dwConv, DWORD dwSent); typedef BOOL(WINAPI* FPOurImmSetStatusWindowPos)(HIMC hIMC, LPPOINT pPt); typedef BOOL(WINAPI* FPOurImmConfigureIME)(HKL hKL, HWND hWnd, DWORD dw, LPVOID pv); typedef LRESULT(WINAPI* FPOurImmEscapeA)(HKL hKL, HIMC hIMC, UINT ui, LPVOID pv); typedef BOOL(WINAPI* FPOurImmNotifyIME)(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue); typedef LPVOID(WINAPI* FPOurImmLockIMCC)(HIMCC hIMCC); typedef HIMCC(WINAPI* FPOurImmReSizeIMCC)(HIMCC hIMCC, DWORD dw); typedef BOOL(WINAPI* FPOurImmUnlockIMCC)(HIMCC hIMCC); typedef DWORD(WINAPI* FPOurImmGetIMCCSize)(HIMCC hIMCC); typedef BOOL(WINAPI* FPOurImmGenerateMessage)(HIMC hIMC); typedef LPINPUTCONTEXT(WINAPI* FPOurImmLockIMC)(HIMC hIMC); typedef BOOL(WINAPI* FPOurImmUnlockIMC)(HIMC hIMC); //typedef LRESULT(WINAPI* FPOurImmRequestMessageW)(HIMC hIMC, WPARAM wParam, LPARAM lParam); typedef HWND(WINAPI* FPOurImmGetDefaultIMEWnd)(HWND hWnd); typedef UINT(WINAPI* FPOurImmGetIMEFileNameA)(HKL hKL, CHAR* psz, UINT uBufLen); typedef BOOL(WINAPI* FPOurImmIsIME)(HKL hKL); static FPOurImmSetOpenStatus pFPOurImmSetOpenStatus = 0; static FPOurImmGetOpenStatus pFPOurImmGetOpenStatus = 0; static FPOurImmGetContext pFPOurImmGetContext = 0; static FPOurImmGetConversionStatus pFPOurImmGetConversionStatus = 0; static FPOurImmSetConversionStatus pFPOurImmSetConversionStatus = 0; static FPOurImmSetStatusWindowPos pFPOurImmSetStatusWindowPos = 0; static FPOurImmConfigureIME pFPOurImmConfigureIME = 0; static FPOurImmEscapeA pFPOurImmEscapeA = 0; static FPOurImmNotifyIME pFPOurImmNotifyIME = 0; static FPOurImmLockIMCC pFPOurImmLockIMCC = 0; static FPOurImmReSizeIMCC pFPOurImmReSizeIMCC = 0; static FPOurImmUnlockIMCC pFPOurImmUnlockIMCC = 0; static FPOurImmGetIMCCSize pFPOurImmGetIMCCSize = 0; static FPOurImmGenerateMessage pFPOurImmGenerateMessage = 0; static FPOurImmLockIMC pFPOurImmLockIMC = 0; static FPOurImmUnlockIMC pFPOurImmUnlockIMC = 0; //static FPOurImmRequestMessageW pFPOurImmRequestMessageW = 0; static FPOurImmGetDefaultIMEWnd pFPOurImmGetDefaultIMEWnd = 0; static FPOurImmGetIMEFileNameA pFPOurImmGetIMEFileNameA = 0; static FPOurImmIsIME pFPOurImmIsIME = 0; static HMODULE hImmLib = (HMODULE)0; BOOL StartIMM(VOID) { if( hImmLib != (HANDLE)0 ) { return TRUE; } hImmLib = LoadLibrary( LIBNAME ); if( hImmLib == (HANDLE)0 ) { return TRUE; } pFPOurImmSetOpenStatus = (FPOurImmSetOpenStatus)GetProcAddress( hImmLib, "ImmSetOpenStatus" ); pFPOurImmGetOpenStatus = (FPOurImmGetOpenStatus)GetProcAddress( hImmLib, "ImmGetOpenStatus" ); pFPOurImmGetContext = (FPOurImmGetContext)GetProcAddress( hImmLib, "ImmGetContext" ); pFPOurImmGetConversionStatus = (FPOurImmGetConversionStatus)GetProcAddress( hImmLib, "ImmGetConversionStatus" ); pFPOurImmSetConversionStatus = (FPOurImmSetConversionStatus)GetProcAddress( hImmLib, "ImmSetConversionStatus" ); pFPOurImmSetStatusWindowPos = (FPOurImmSetStatusWindowPos)GetProcAddress( hImmLib, "ImmSetStatusWindowPos" ); pFPOurImmConfigureIME = (FPOurImmConfigureIME)GetProcAddress( hImmLib, "ImmConfigureIMEA" ); pFPOurImmEscapeA = (FPOurImmEscapeA)GetProcAddress( hImmLib, "ImmEscapeA" ); pFPOurImmNotifyIME = (FPOurImmNotifyIME)GetProcAddress( hImmLib, "ImmNotifyIME" ); pFPOurImmLockIMCC = (FPOurImmLockIMCC)GetProcAddress( hImmLib, "ImmLockIMCC" ); pFPOurImmReSizeIMCC = (FPOurImmReSizeIMCC)GetProcAddress( hImmLib, "ImmReSizeIMCC" ); pFPOurImmUnlockIMCC = (FPOurImmUnlockIMCC)GetProcAddress( hImmLib, "ImmUnlockIMCC" ); pFPOurImmGetIMCCSize = (FPOurImmGetIMCCSize)GetProcAddress( hImmLib, "ImmGetIMCCSize" ); pFPOurImmGenerateMessage = (FPOurImmGenerateMessage)GetProcAddress( hImmLib, "ImmGenerateMessage" ); pFPOurImmLockIMC = (FPOurImmLockIMC)GetProcAddress( hImmLib, "ImmLockIMC" ); pFPOurImmUnlockIMC = (FPOurImmUnlockIMC)GetProcAddress( hImmLib, "ImmUnlockIMC" ); // pFPOurImmRequestMessageW = (FPOurImmRequestMessageW)GetProcAddress( hImmLib, "ImmRequestMessageW" ); pFPOurImmGetDefaultIMEWnd = (FPOurImmGetDefaultIMEWnd)GetProcAddress( hImmLib, "ImmGetDefaultIMEWnd" ); pFPOurImmGetIMEFileNameA = (FPOurImmGetIMEFileNameA)GetProcAddress( hImmLib, "ImmGetIMEFileNameA" ); pFPOurImmIsIME = (FPOurImmIsIME)GetProcAddress( hImmLib, "ImmIsIME" ); return FALSE; } VOID EndIMM(VOID) { FreeLibrary( hImmLib ); } // // OurImmSetOpenStatus // BOOL OurImmSetOpenStatus(HIMC hIMC, BOOL fOpen) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { return (vpAIMM->SetOpenStatus( hIMC, fOpen ) == S_OK) ? TRUE : FALSE; } #endif if( pFPOurImmSetOpenStatus ) { return pFPOurImmSetOpenStatus(hIMC, fOpen ); } return FALSE; } // // OurImmGetOpenStatus // BOOL OurImmGetOpenStatus(HIMC hIMC) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { return (vpAIMM->GetOpenStatus( hIMC ) == S_OK ? TRUE : FALSE); } #endif if( pFPOurImmGetOpenStatus ) { // * check * // // sometime IMM sets 0xffffffff as TRUE // return (pFPOurImmGetOpenStatus( hIMC ) ? TRUE : FALSE); } return FALSE; } // // OurImmGetContext // HIMC OurImmGetContext(HWND hWnd) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { HIMC hIMC = (HIMC)0; vpAIMM->GetContext( hWnd, &hIMC ); return hIMC; } #endif if( pFPOurImmGetContext ) { return pFPOurImmGetContext(hWnd ); } return NULL; } // // OurImmGetConversionStatus // BOOL OurImmGetConversionStatus(HIMC hIMC, LPDWORD pdwConv, LPDWORD pdwSent) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { return (vpAIMM->GetConversionStatus(hIMC, pdwConv, pdwSent ) == S_OK) ? TRUE : FALSE; } #endif if( pFPOurImmGetConversionStatus ) { return pFPOurImmGetConversionStatus(hIMC, pdwConv, pdwSent ); } return NULL; } // // OurImmSetConversionStatus // BOOL OurImmSetConversionStatus(HIMC hIMC, DWORD dwConv, DWORD dwSent) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { return (vpAIMM->SetConversionStatus(hIMC, dwConv, dwSent) == S_OK) ? TRUE : FALSE; } #endif if( pFPOurImmSetConversionStatus ) { return pFPOurImmSetConversionStatus(hIMC, dwConv, dwSent); } return NULL; } // // OurImmSetStatusWindowPos // BOOL OurImmSetStatusWindowPos(HIMC hIMC, LPPOINT pPt) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { return (vpAIMM->SetStatusWindowPos( hIMC, pPt) == S_OK) ? TRUE : FALSE; } #endif if( pFPOurImmSetStatusWindowPos ) { return pFPOurImmSetStatusWindowPos( hIMC, pPt); } return NULL; } // // OurImmConfigureIME // BOOL OurImmConfigureIME(HKL hKL, HWND hWnd, DWORD dw, LPVOID pv) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { return (vpAIMM->ConfigureIMEA(hKL, hWnd, dw, (REGISTERWORDA*)pv ) == S_OK) ? TRUE : FALSE; } #endif if( pFPOurImmConfigureIME ) { return pFPOurImmConfigureIME(hKL, hWnd, dw, pv ); } return NULL; } // // OurImmEscapeA // LRESULT OurImmEscapeA(HKL hKL, HIMC hIMC, UINT ui, LPVOID pv) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { LRESULT lRet = 0; vpAIMM->EscapeA(hKL, hIMC, ui, pv, &lRet ); return lRet; } #endif if( pFPOurImmEscapeA ) { return pFPOurImmEscapeA(hKL, hIMC, ui, pv ); } return NULL; } // // OurImmNotifyIME // BOOL OurImmNotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { return (vpAIMM->NotifyIME(hIMC, dwAction, dwIndex, dwValue ) == S_OK) ? TRUE : FALSE; } #endif if( pFPOurImmNotifyIME ) { return pFPOurImmNotifyIME(hIMC, dwAction, dwIndex, dwValue ); } return NULL; } // // OurImmLockIMCC // LPVOID OurImmLockIMCC(HIMCC hIMCC) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { VOID* pv = NULL; vpAIMM->LockIMCC( hIMCC, &pv); return pv; } #endif if( pFPOurImmLockIMCC ) { return pFPOurImmLockIMCC( hIMCC); } return NULL; } // // OurImmReSizeIMCC // HIMCC OurImmReSizeIMCC(HIMCC hIMCC, DWORD dw) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { HIMCC hIMCC2 = (HIMCC)0; vpAIMM->ReSizeIMCC(hIMCC, dw, &hIMCC2 ); return hIMCC2; } #endif if( pFPOurImmReSizeIMCC ) { return pFPOurImmReSizeIMCC(hIMCC, dw ); } return NULL; } // // OurImmUnlockIMCC // BOOL OurImmUnlockIMCC(HIMCC hIMCC) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { return (vpAIMM->UnlockIMCC(hIMCC ) == S_OK) ? TRUE : FALSE; } #endif if( pFPOurImmUnlockIMCC ) { return pFPOurImmUnlockIMCC(hIMCC ); } return NULL; } // // OurImmGetIMCCSize // DWORD OurImmGetIMCCSize(HIMCC hIMCC) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { DWORD dwSize = 0; vpAIMM->GetIMCCSize(hIMCC, &dwSize ); return dwSize; } #endif if( pFPOurImmGetIMCCSize ) { return pFPOurImmGetIMCCSize(hIMCC ); } return NULL; } // // OurImmGenerateMessage // BOOL OurImmGenerateMessage(HIMC hIMC) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { return (vpAIMM->GenerateMessage( hIMC) == S_OK) ? TRUE : FALSE; } #endif if( pFPOurImmGenerateMessage ) { return pFPOurImmGenerateMessage( hIMC); } return NULL; } // // OurImmLockIMC // LPINPUTCONTEXT OurImmLockIMC(HIMC hIMC) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { LPINPUTCONTEXT pI = NULL; vpAIMM->LockIMC( hIMC, &pI); return pI; } #endif if( pFPOurImmLockIMC ) { return pFPOurImmLockIMC( hIMC); } return NULL; } // // OurImmUnlockIMC // BOOL OurImmUnlockIMC(HIMC hIMC) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { return (vpAIMM->UnlockIMC( hIMC ) == S_OK) ? TRUE : FALSE; } #endif if( pFPOurImmUnlockIMC ) { return pFPOurImmUnlockIMC( hIMC ); } return NULL; } #if NOTUSED // // OurImmRequestMessageW // LRESULT OurImmRequestMessageW(HIMC hIMC, WPARAM wParam, LPARAM lParam) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { return 0; //vpAIMM->UnlockIMC( hIMC ); } #endif if( pFPOurImmRequestMessageW ) { return pFPOurImmRequestMessageW( hIMC, wParam, lParam ); } return NULL; } #endif // // OurImmGetDefaultIMEWnd // HWND OurImmGetDefaultIMEWnd(HWND hWnd ) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { HWND hWndDef = (HWND)0; vpAIMM->GetDefaultIMEWnd(hWnd, &hWndDef); return hWndDef; } #endif if( pFPOurImmGetDefaultIMEWnd ) { return pFPOurImmGetDefaultIMEWnd(hWnd); } return NULL; } UINT OurImmGetIMEFileNameA(HKL hKL, LPSTR pszName, UINT uBufLen) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { UINT ui = 0; vpAIMM->GetIMEFileNameA(hKL, uBufLen, pszName, &ui); return ui; } #endif if( pFPOurImmGetIMEFileNameA ) { return pFPOurImmGetIMEFileNameA(hKL, pszName, uBufLen); } return NULL; } // // OurImmIsIME // BOOL OurImmIsIME(HKL hKL) { #ifdef _AIMM_ if( IsAIME() == TRUE && vpAIMM) { // why? BOOL fRet = FALSE; return (vpAIMM->IsIME(hKL) == S_OK) ? TRUE : FALSE; //return fRet; } #endif if( pFPOurImmIsIME ) { return pFPOurImmIsIME(hKL ); } return FALSE; } #endif // UNDER_CE