All user interfaces of the input method call IMM. Implemented by the APIs in H
I found the IMM. H source code show in VC.
// Prototype of IMM API
Hkl winapi ImmInstallIMEA (LPCSTR lpszIMEFileName, LPCSTR lpszLayoutText );
Hkl winapi ImmInstallIMEW (LPCWSTR lpszIMEFileName, LPCWSTR lpszLayoutText );
# Ifdef UNICODE
# Define ImmInstallIME ImmInstallIMEW
# Else
# Define ImmInstallIME ImmInstallIMEA
# Endif //! UNICODE
Hwnd winapi ImmGetDefaultIMEWnd (HWND );
Uint winapi ImmGetDescriptionA (HKL, LPSTR, UINT uBufLen );
Uint winapi ImmGetDescriptionW (HKL, LPWSTR, UINT uBufLen );
# Ifdef UNICODE
# Define ImmGetDescription ImmGetDescriptionW
# Else
# Define ImmGetDescription ImmGetDescriptionA
# Endif //! UNICODE
Uint winapi immgetimefilenamea (hkl, lpstr, uint ubuflen );
Uint winapi immgetimefilenamew (hkl, lpwstr, uint ubuflen );
# Ifdef Unicode
# Define immgetimefilename immgetimefilenamew
# Else
# Define immgetimefilename immgetimefilenamea
# Endif //! Unicode
DWORD winapi immgetproperty (hkl, DWORD );
Bool winapi immisime (hkl );
Bool winapi immsimulatehotkey (hwnd, DWORD );
Himc winapi immcreatecontext (void );
Bool winapi immdestroycontext (himc );
Himc winapi immgetcontext (hwnd );
Bool winapi immreleasecontext (hwnd, himc );
Himc winapi immassociatecontext (hwnd, himc );
# If (winver> = 0x040a)
Bool winapi immassociatecontextex (hwnd, himc, DWORD );
# Endif/* winver> = 0x040a */
Long winapi immgetcompositionstringa (himc, DWORD, lpvoid, DWORD );
Long winapi immgetcompositionstringw (himc, DWORD, lpvoid, DWORD );
# Ifdef Unicode
# Define immgetcompositionstring immgetcompositionstringw
# Else
# Define immgetcompositionstring immgetcompositionstringa
# Endif //! Unicode
Bool winapi immsetcompositionstringa (himc, DWORD dwindex, lpcvoid lpcomp, DWORD, lpcvoid lpread, DWORD );
Bool winapi immsetcompositionstringw (himc, DWORD dwindex, lpcvoid lpcomp, DWORD, lpcvoid lpread, DWORD );
# Ifdef Unicode
# Define immsetcompositionstring immsetcompositionstringw
# Else
# Define immsetcompositionstring immsetcompositionstringa
# Endif //! Unicode
Dword winapi ImmGetCandidateListCountA (HIMC, LPDWORD lpdwListCount );
Dword winapi ImmGetCandidateListCountW (HIMC, LPDWORD lpdwListCount );
# Ifdef UNICODE
# Define ImmGetCandidateListCount ImmGetCandidateListCountW
# Else
# Define ImmGetCandidateListCount ImmGetCandidateListCountA
# Endif //! UNICODE
Dword winapi ImmGetCandidateListA (HIMC, DWORD deIndex, LPCANDIDATELIST, DWORD dwBufLen );
Dword winapi ImmGetCandidateListW (HIMC, DWORD deIndex, LPCANDIDATELIST, DWORD dwBufLen );
# Ifdef UNICODE
# Define ImmGetCandidateList ImmGetCandidateListW
# Else
# Define ImmGetCandidateList ImmGetCandidateListA
# Endif //! UNICODE
Dword winapi ImmGetGuideLineA (HIMC, DWORD dwIndex, LPSTR, DWORD dwBufLen );
Dword winapi ImmGetGuideLineW (HIMC, DWORD dwIndex, LPWSTR, DWORD dwBufLen );
# Ifdef UNICODE
# Define ImmGetGuideLine ImmGetGuideLineW
# Else
# Define ImmGetGuideLine ImmGetGuideLineA
# Endif //! UNICODE
Bool winapi ImmGetConversionStatus (HIMC, LPDWORD, LPDWORD );
Bool winapi ImmSetConversionStatus (HIMC, DWORD, DWORD );
Bool winapi ImmGetOpenStatus (HIMC );
Bool winapi ImmSetOpenStatus (HIMC, BOOL );
# Ifdef _ WINGDI _
# Ifndef NOGDI
Bool winapi ImmGetCompositionFontA (HIMC, LPLOGFONTA );
Bool winapi ImmGetCompositionFontW (HIMC, LPLOGFONTW );
# Ifdef UNICODE
# Define ImmGetCompositionFont ImmGetCompositionFontW
# Else
# Define ImmGetCompositionFont ImmGetCompositionFontA
# Endif //! Unicode
Bool winapi immsetcompositionfonta (himc, lplogfonta );
Bool winapi immsetcompositionfontw (himc, lplogfontw );
# Ifdef Unicode
# Define immsetcompositionfont immsetcompositionfontw
# Else
# Define immsetcompositionfont immsetcompositionfonta
# Endif //! Unicode
# Endif // ifndef nogdi
# Endif // ifdef _ wingdi _
Bool winapi immconfigureimea (hkl, hwnd, DWORD, lpvoid );
Bool winapi immconfigureimew (hkl, hwnd, DWORD, lpvoid );
# Ifdef Unicode
# Define immconfigureime immconfigureimew
# Else
# Define immconfigureime immconfigureimea
# Endif //! Unicode
Lresult winapi immescapea (hkl, himc, uint, lpvoid );
Lresult winapi immescapew (hkl, himc, uint, lpvoid );
# Ifdef Unicode
# Define immescape immescapew
# Else
# Define immescape immescapea
# Endif //! Unicode
DWORD winapi immgetconversionlista (hkl, himc, lpcstr, lpcandidatelist, DWORD dwbuflen, uint uflag );
DWORD winapi immgetconversionlistw (hkl, himc, lpcwstr, lpcandidatelist, DWORD dwbuflen, uint uflag );
# Ifdef Unicode
# Define immgetconversionlist immgetconversionlistw
# Else
# Define immgetconversionlist immgetconversionlista
# Endif //! Unicode
Bool winapi immpolicyime (himc, DWORD dwaction, DWORD dwindex, DWORD dwvalue );
Bool winapi immgetstatuswindowpos (himc, lppoint );
Bool winapi ImmSetStatusWindowPos (HIMC, LPPOINT );
Bool winapi ImmGetCompositionWindow (HIMC, LPCOMPOSITIONFORM );
Bool winapi ImmSetCompositionWindow (HIMC, LPCOMPOSITIONFORM );
Bool winapi ImmGetCandidateWindow (HIMC, DWORD, LPCANDIDATEFORM );
Bool winapi ImmSetCandidateWindow (HIMC, LPCANDIDATEFORM );
Bool winapi ImmIsUIMessageA (HWND, UINT, WPARAM, LPARAM );
Bool winapi ImmIsUIMessageW (HWND, UINT, WPARAM, LPARAM );
# Ifdef UNICODE
# Define ImmIsUIMessage ImmIsUIMessageW
# Else
# Define ImmIsUIMessage ImmIsUIMessageA
# Endif //! UNICODE
Uint winapi ImmGetVirtualKey (HWND );
Typedef int (CALLBACK * REGISTERWORDENUMPROCA) (maid );
Typedef int (CALLBACK * REGISTERWORDENUMPROCW) (maid );
# Ifdef UNICODE
# Define REGISTERWORDENUMPROC REGISTERWORDENUMPROCW
# Else
# Define REGISTERWORDENUMPROC REGISTERWORDENUMPROCA
# Endif //! UNICODE
Bool winapi ImmRegisterWordA (HKL, LPCSTR lpszReading, DWORD, LPCSTR lpszRegister );
Bool winapi ImmRegisterWordW (HKL, LPCWSTR lpszReading, DWORD, LPCWSTR lpszRegister );
# Ifdef UNICODE
# Define ImmRegisterWord ImmRegisterWordW
# Else
# Define ImmRegisterWord ImmRegisterWordA
# Endif //! UNICODE
Bool winapi ImmUnregisterWordA (HKL, LPCSTR lpszReading, DWORD, LPCSTR lpszUnregister );
Bool winapi ImmUnregisterWordW (HKL, LPCWSTR lpszReading, DWORD, LPCWSTR lpszUnregister );
# Ifdef UNICODE
# Define ImmUnregisterWord ImmUnregisterWordW
# Else
# Define ImmUnregisterWord ImmUnregisterWordA
# Endif //! UNICODE
Uint winapi ImmGetRegisterWordStyleA (HKL, UINT nItem, LPSTYLEBUFA );
Uint winapi ImmGetRegisterWordStyleW (HKL, UINT nItem, LPSTYLEBUFW );
# Ifdef UNICODE
# Define ImmGetRegisterWordStyle ImmGetRegisterWordStyleW
# Else
# Define ImmGetRegisterWordStyle ImmGetRegisterWordStyleA
# Endif //! UNICODE
Uint winapi ImmEnumRegisterWordA (HKL, REGISTERWORDENUMPROCA, LPCSTR lpszReading, DWORD, LPCSTR lpszRegister, LPVOID );
Uint winapi ImmEnumRegisterWordW (HKL, REGISTERWORDENUMPROCW, LPCWSTR lpszReading, DWORD, LPCWSTR lpszRegister, LPVOID );
# Ifdef UNICODE
# Define ImmEnumRegisterWord ImmEnumRegisterWordW
# Else
# Define ImmEnumRegisterWord ImmEnumRegisterWordA
# Endif //! UNICODE
# If (WINVER> = 0x040A)
Bool winapi ImmDisableIME (DWORD );
Dword winapi ImmGetImeMenuItemsA (HIMC, DWORD, DWORD, LPIMEMENUITEMINFOA, LPIMEMENUITEMINFOA, DWORD );
Dword winapi ImmGetImeMenuItemsW (HIMC, DWORD, DWORD, LPIMEMENUITEMINFOW, LPIMEMENUITEMINFOW, DWORD );
# Ifdef UNICODE
# Define ImmGetImeMenuItems ImmGetImeMenuItemsW
# Else
# Define ImmGetImeMenuItems ImmGetImeMenuItemsA
# Endif //! UNICODE
# Endif/* WINVER> = 0x040A */