You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
485 lines
17 KiB
485 lines
17 KiB
/**************************************************************************\
|
|
* Module Name: fareast.c
|
|
*
|
|
* Win32 IMM/IME API functions
|
|
*
|
|
* Copyright (c) 1985 - 1999, Microsoft Corporation
|
|
*
|
|
* History:
|
|
* 07-May-1996 takaok Created.
|
|
\**************************************************************************/
|
|
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
#define COMMON_RETURN_ZERO \
|
|
return 0;
|
|
|
|
////////////////////////
|
|
// Fake routines
|
|
////////////////////////
|
|
|
|
VOID fakeImm_v1(PVOID dummy)
|
|
{
|
|
UNREFERENCED_PARAMETER(dummy);
|
|
}
|
|
|
|
#ifdef CUAS_ENABLE
|
|
VOID fakeImm_vd1(DWORD dummy)
|
|
{
|
|
UNREFERENCED_PARAMETER(dummy);
|
|
};
|
|
#endif // CUAS_ENABLE
|
|
|
|
DWORD fakeImm_d1(DWORD dummy)
|
|
{
|
|
UNREFERENCED_PARAMETER(dummy);
|
|
return 0;
|
|
}
|
|
|
|
#ifdef CUAS_ENABLE
|
|
DWORD fakeImm_dv1(VOID)
|
|
{
|
|
return 0;
|
|
};
|
|
#endif // CUAS_ENABLE
|
|
|
|
VOID fakeImm_v2(PVOID dummy1, PVOID dummy2)
|
|
{
|
|
UNREFERENCED_PARAMETER(dummy1);
|
|
UNREFERENCED_PARAMETER(dummy2);
|
|
}
|
|
|
|
DWORD fakeImm_d2(DWORD dummy1, DWORD dummy2)
|
|
{
|
|
UNREFERENCED_PARAMETER(dummy1);
|
|
UNREFERENCED_PARAMETER(dummy2);
|
|
return 0;
|
|
}
|
|
|
|
DWORD fakeImm_d3(DWORD dummy1, DWORD dummy2, DWORD dummy3)
|
|
{
|
|
UNREFERENCED_PARAMETER(dummy1);
|
|
UNREFERENCED_PARAMETER(dummy2);
|
|
UNREFERENCED_PARAMETER(dummy3);
|
|
return 0;
|
|
}
|
|
|
|
DWORD fakeImm_bwuwl(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
UNREFERENCED_PARAMETER(hwnd);
|
|
UNREFERENCED_PARAMETER(msg);
|
|
UNREFERENCED_PARAMETER(wParam);
|
|
UNREFERENCED_PARAMETER(lParam);
|
|
return 0;
|
|
}
|
|
|
|
VOID WINAPI fakeImm_wv1(PVOID dummy)
|
|
{
|
|
UNREFERENCED_PARAMETER(dummy);
|
|
}
|
|
|
|
DWORD WINAPI fakeImm_wd1(PVOID dummy)
|
|
{
|
|
UNREFERENCED_PARAMETER(dummy);
|
|
COMMON_RETURN_ZERO;
|
|
}
|
|
|
|
DWORD WINAPI fakeImm_wd2(PVOID dummy1, PVOID dummy2)
|
|
{
|
|
UNREFERENCED_PARAMETER(dummy1);
|
|
UNREFERENCED_PARAMETER(dummy2);
|
|
COMMON_RETURN_ZERO;
|
|
}
|
|
|
|
//
|
|
// This stub returns true.
|
|
//
|
|
BOOL WINAPI fakeImm_bd2(PVOID dummy1, PVOID dummy2)
|
|
{
|
|
UNREFERENCED_PARAMETER(dummy1);
|
|
UNREFERENCED_PARAMETER(dummy2);
|
|
return TRUE;
|
|
}
|
|
|
|
DWORD WINAPI fakeImm_wd3(PVOID dummy1, PVOID dummy2, PVOID dummy3)
|
|
{
|
|
UNREFERENCED_PARAMETER(dummy1);
|
|
UNREFERENCED_PARAMETER(dummy2);
|
|
UNREFERENCED_PARAMETER(dummy3);
|
|
|
|
COMMON_RETURN_ZERO;
|
|
}
|
|
|
|
DWORD WINAPI fakeImm_wd4(PVOID dummy1, PVOID dummy2, PVOID dummy3, PVOID dummy4)
|
|
{
|
|
UNREFERENCED_PARAMETER(dummy1);
|
|
UNREFERENCED_PARAMETER(dummy2);
|
|
UNREFERENCED_PARAMETER(dummy3);
|
|
UNREFERENCED_PARAMETER(dummy4);
|
|
|
|
COMMON_RETURN_ZERO;
|
|
}
|
|
|
|
DWORD WINAPI fakeImm_wd5(PVOID dummy1, PVOID dummy2, PVOID dummy3, PVOID dummy4, PVOID dummy5)
|
|
{
|
|
UNREFERENCED_PARAMETER(dummy1);
|
|
UNREFERENCED_PARAMETER(dummy2);
|
|
UNREFERENCED_PARAMETER(dummy3);
|
|
UNREFERENCED_PARAMETER(dummy4);
|
|
UNREFERENCED_PARAMETER(dummy5);
|
|
|
|
COMMON_RETURN_ZERO;
|
|
}
|
|
|
|
DWORD WINAPI fakeImm_wd6(PVOID dummy1, PVOID dummy2, PVOID dummy3, PVOID dummy4, PVOID dummy5, PVOID dummy6)
|
|
{
|
|
UNREFERENCED_PARAMETER(dummy1);
|
|
UNREFERENCED_PARAMETER(dummy2);
|
|
UNREFERENCED_PARAMETER(dummy3);
|
|
UNREFERENCED_PARAMETER(dummy4);
|
|
UNREFERENCED_PARAMETER(dummy5);
|
|
UNREFERENCED_PARAMETER(dummy6);
|
|
|
|
COMMON_RETURN_ZERO;
|
|
}
|
|
|
|
ImmApiEntries gImmApiEntries = {
|
|
(BOOL (WINAPI* /*ImmWINNLSEnableIME*/)(HWND, BOOL)) fakeImm_wd2,
|
|
(BOOL (WINAPI* /*ImmWINNLSGetEnableStatus*/)(HWND)) fakeImm_wd1,
|
|
(LRESULT (WINAPI* /*SendIMEMessageExW*/)(HWND, LPARAM)) fakeImm_wd2,
|
|
(LRESULT (WINAPI* /*SendIMEMessageExA*/)(HWND, LPARAM)) fakeImm_wd2,
|
|
(BOOL (WINAPI* /*IMPGetIMEW*/)(HWND, LPIMEPROW)) fakeImm_wd2,
|
|
(BOOL (WINAPI* /*IMPGetIMEA*/)(HWND, LPIMEPROA)) fakeImm_wd2,
|
|
(BOOL (WINAPI* /*IMPQueryIMEW*/)(LPIMEPROW)) fakeImm_wd1,
|
|
(BOOL (WINAPI* /*IMPQueryIMEA*/)(LPIMEPROA)) fakeImm_wd1,
|
|
(BOOL (WINAPI* /*IMPSetIMEW*/)(HWND, LPIMEPROW)) fakeImm_wd2,
|
|
(BOOL (WINAPI* /*IMPSetIMEA*/)(HWND, LPIMEPROA)) fakeImm_wd2,
|
|
|
|
(HIMC (WINAPI* /*ImmAssociateContext*/)(HWND, HIMC)) fakeImm_wd2,
|
|
(LRESULT (WINAPI* /*ImmEscapeA*/)(HKL, HIMC, UINT, LPVOID)) fakeImm_wd4,
|
|
(LRESULT (WINAPI* /*ImmEscapeW*/)(HKL, HIMC, UINT, LPVOID)) fakeImm_wd4,
|
|
(LONG (WINAPI* /*ImmGetCompositionStringA*/)(HIMC, DWORD, LPVOID, DWORD)) fakeImm_wd4,
|
|
(LONG (WINAPI* /*ImmGetCompositionStringW*/)(HIMC, DWORD, LPVOID, DWORD)) fakeImm_wd4,
|
|
(BOOL (WINAPI* /*ImmGetCompositionWindow*/)(HIMC, LPCOMPOSITIONFORM)) fakeImm_wd2,
|
|
(HIMC (WINAPI* /*ImmGetContext*/)(HWND)) fakeImm_wd1,
|
|
(HWND (WINAPI* /*ImmGetDefaultIMEWnd*/)(HWND)) fakeImm_wd1,
|
|
(BOOL (WINAPI* /*ImmIsIME*/)(HKL)) fakeImm_wd1,
|
|
(BOOL (WINAPI* /*ImmReleaseContext*/)(HWND, HIMC)) fakeImm_wd2,
|
|
(BOOL (* /*ImmRegisterClient*/)(PSHAREDINFO, HINSTANCE)) fakeImm_bd2,
|
|
|
|
(BOOL (WINAPI* /*ImmGetCompositionFontW*/)(HIMC, LPLOGFONTW)) fakeImm_wd2,
|
|
(BOOL (WINAPI* /*ImmGetCompositionFontA*/)(HIMC, LPLOGFONTA)) fakeImm_wd2,
|
|
(BOOL (WINAPI* /*ImmSetCompositionFontW*/)(HIMC, LPLOGFONTW)) fakeImm_wd2,
|
|
(BOOL (WINAPI* /*ImmSetCompositionFontA*/)(HIMC, LPLOGFONTA)) fakeImm_wd2,
|
|
|
|
(BOOL (WINAPI* /*ImmSetCompositionWindow*/)(HIMC, LPCOMPOSITIONFORM)) fakeImm_wd2,
|
|
(BOOL (WINAPI* /*ImmNotifyIME*/)(HIMC, DWORD, DWORD, DWORD)) fakeImm_wd4,
|
|
(PINPUTCONTEXT (WINAPI* /*ImmLockIMC*/)(HIMC)) fakeImm_wd1,
|
|
(BOOL (WINAPI* /*ImmUnlockIMC*/)(HIMC)) fakeImm_wd1,
|
|
(BOOL (WINAPI* /*ImmLoadIME*/)(HKL)) fakeImm_wd1,
|
|
(BOOL (WINAPI* /*ImmSetOpenStatus*/)(HIMC, BOOL)) fakeImm_wd2,
|
|
(BOOL (WINAPI* /*ImmFreeLayout*/)(DWORD dwFlag)) fakeImm_wd1,
|
|
(BOOL (WINAPI* /*ImmActivateLayout*/)(HKL)) fakeImm_wd1,
|
|
(BOOL (WINAPI* /*ImmGetCandidateWindow*/)(HIMC, DWORD, LPCANDIDATEFORM)) fakeImm_wd3,
|
|
(BOOL (WINAPI* /*ImmSetCandidateWindow*/)(HIMC, LPCANDIDATEFORM)) fakeImm_wd2,
|
|
(BOOL (WINAPI* /*ImmConfigureIMEW*/)(HKL, HWND, DWORD, LPVOID)) fakeImm_wd4,
|
|
(BOOL (WINAPI* /*ImmGetConversionStatus*/)(HIMC, LPDWORD, LPDWORD)) fakeImm_wd3,
|
|
(BOOL (WINAPI* /*ImmSetConversionStatus*/)(HIMC, DWORD, DWORD)) fakeImm_wd3,
|
|
(BOOL (WINAPI* /*ImmSetStatusWindowPos*/)(HIMC, LPPOINT)) fakeImm_wd2,
|
|
(BOOL (WINAPI* /*ImmGetImeInfoEx*/)(PIMEINFOEX, IMEINFOEXCLASS, PVOID)) fakeImm_wd3,
|
|
(PIMEDPI (WINAPI* /*ImmLockImeDpi*/)(HKL)) fakeImm_wd1,
|
|
(VOID (WINAPI* /*ImmUnlockImeDpi*/)(PIMEDPI)) fakeImm_wv1,
|
|
(BOOL (WINAPI* /*ImmGetOpenStatus*/)(HIMC)) fakeImm_wd1,
|
|
(BOOL (* /*ImmSetActiveContext*/)(HWND, HIMC, BOOL)) fakeImm_d3,
|
|
(BOOL (* /*ImmTranslateMessage*/)(HWND, UINT, WPARAM, LPARAM)) fakeImm_bwuwl,
|
|
(BOOL (* /*ImmLoadLayout*/)(HKL, PIMEINFOEX)) fakeImm_d2,
|
|
(DWORD (WINAPI* /*ImmProcessKey*/)(HWND, HKL, UINT, LPARAM, DWORD)) fakeImm_wd5,
|
|
(LRESULT (* /*ImmPutImeMenuItemsIntoMappedFile*/)(HIMC)) fakeImm_d1,
|
|
(DWORD (WINAPI* /*ImmGetProperty*/)(HKL, DWORD)) fakeImm_wd2,
|
|
(BOOL (WINAPI* /*ImmSetCompositionStringA*/)(
|
|
HIMC hImc, DWORD dwIndex, LPCVOID lpComp, DWORD dwCompLen, LPCVOID lpRead, DWORD dwReadLen))
|
|
fakeImm_wd6,
|
|
(BOOL (WINAPI* /*ImmSetCompositionStringW*/)(
|
|
HIMC hImc, DWORD dwIndex, LPCVOID lpComp, DWORD dwCompLen, LPCVOID lpRead, DWORD dwReadLen))
|
|
fakeImm_wd6,
|
|
(BOOL (WINAPI* /*ImmEnumInputContext*/)(
|
|
DWORD idThread, IMCENUMPROC lpfn, LPARAM lParam)) fakeImm_wd3,
|
|
|
|
(LRESULT (WINAPI* /*ImmSystemHandler*/)(HIMC, WPARAM, LPARAM))
|
|
fakeImm_wd3,
|
|
#ifdef CUAS_ENABLE
|
|
// Cicero
|
|
(HRESULT (WINAPI* /* CtfImmTIMActivate*/)(HKL)) fakeImm_wd1,
|
|
(VOID (WINAPI* /* CtfImmRestoreToolbarWnd*/)(DWORD)) fakeImm_vd1,
|
|
(DWORD (WINAPI* /* CtfImmHideToolbarWnd*/)(VOID)) fakeImm_dv1,
|
|
(LRESULT (WINAPI* /* CtfImmDispatchDefImeMessage*/)(HWND, UINT, WPARAM, LPARAM)) fakeImm_bwuwl,
|
|
#endif // CUAS_ENABLE
|
|
};
|
|
|
|
|
|
//
|
|
// Imm32's instance handle
|
|
//
|
|
// NULL if not initialized.
|
|
//
|
|
|
|
HMODULE ghImm32;
|
|
|
|
#define IMMMODULENAME L"IMM32.DLL"
|
|
#define PATHDLM L'\\'
|
|
#define IMMMODULENAMELEN ((sizeof PATHDLM + sizeof IMMMODULENAME) / sizeof(WCHAR))
|
|
|
|
VOID GetImmFileName(PWSTR wszImmFile)
|
|
{
|
|
UINT i = GetSystemDirectoryW(wszImmFile, MAX_PATH);
|
|
if (i > 0 && i < MAX_PATH - IMMMODULENAMELEN) {
|
|
wszImmFile += i;
|
|
if (wszImmFile[-1] != PATHDLM) {
|
|
*wszImmFile++ = PATHDLM;
|
|
}
|
|
}
|
|
wcscpy(wszImmFile, IMMMODULENAME);
|
|
}
|
|
|
|
#define REGISTER(name,cast) \
|
|
gImmApiEntries.name = (cast)GetProcAddress(hImm, #name); \
|
|
if (gImmApiEntries.name == NULL) { \
|
|
RIPMSG1(RIP_WARNING, "gImmApiEntries.%s got to be NULL", #name); \
|
|
gImmApiEntries.name = (PVOID)fakeImm_v1; \
|
|
return; \
|
|
} else
|
|
|
|
///////////////////////////////////////////////////////
|
|
// _InitializeImmEntryTable(HMODULE)
|
|
//
|
|
// Initialize IMM entry table:
|
|
///////////////////////////////////////////////////////
|
|
VOID _InitializeImmEntryTable(VOID)
|
|
{
|
|
HMODULE hImm = ghImm32;
|
|
WCHAR wszImmFile[MAX_PATH];
|
|
|
|
if (((PVOID)gImmApiEntries.ImmWINNLSEnableIME) != ((PVOID)fakeImm_wd2)) {
|
|
// already initialized.
|
|
return;
|
|
}
|
|
|
|
GetImmFileName(wszImmFile);
|
|
|
|
if (hImm == NULL) {
|
|
// check if IMM DLL is already attached to the process
|
|
hImm = GetModuleHandleW(wszImmFile);
|
|
}
|
|
|
|
if (hImm == NULL) {
|
|
hImm = ghImm32 = LoadLibraryW(wszImmFile);
|
|
if (hImm == NULL) {
|
|
RIPMSG1(RIP_WARNING, "_InitializeImmEntryTable: failed to load Imm32.Dll: err=%d\n", GetLastError());
|
|
return;
|
|
}
|
|
|
|
// at this point, Init routine of IMM32 has been called, thus User32InitializeImmEntry.. called.
|
|
// all what we have to do is just return here.
|
|
return;
|
|
}
|
|
|
|
if (hImm == NULL) {
|
|
RIPMSG0(RIP_WARNING, "Failed to attach IMM32.DLL.\n");
|
|
return;
|
|
}
|
|
|
|
// get the addresses of the procedures
|
|
REGISTER(ImmWINNLSEnableIME, BOOL (WINAPI*)(HWND, BOOL));
|
|
REGISTER(ImmWINNLSGetEnableStatus, BOOL (*)(HWND));
|
|
REGISTER(ImmSendIMEMessageExW, LRESULT (*)(HWND, LPARAM));
|
|
REGISTER(ImmSendIMEMessageExA, LRESULT (*)(HWND, LPARAM));
|
|
REGISTER(ImmIMPGetIMEW, BOOL(*)(HWND, LPIMEPROW));
|
|
REGISTER(ImmIMPGetIMEA, BOOL(*)(HWND, LPIMEPROA))
|
|
REGISTER(ImmIMPQueryIMEW, BOOL(*)(LPIMEPROW))
|
|
REGISTER(ImmIMPQueryIMEA, BOOL(*)(LPIMEPROA));
|
|
REGISTER(ImmIMPSetIMEW, BOOL(*)(HWND, LPIMEPROW));
|
|
REGISTER(ImmIMPSetIMEA, BOOL(*)(HWND, LPIMEPROA));
|
|
|
|
REGISTER(ImmAssociateContext, HIMC (WINAPI*)(HWND, HIMC));
|
|
REGISTER(ImmEscapeA, LRESULT(WINAPI*)(HKL, HIMC, UINT, LPVOID));
|
|
REGISTER(ImmEscapeW, LRESULT(WINAPI*)(HKL, HIMC, UINT, LPVOID));
|
|
REGISTER(ImmGetCompositionStringA, LONG (WINAPI*)(HIMC, DWORD, LPVOID, DWORD));
|
|
REGISTER(ImmGetCompositionStringW, LONG (WINAPI*)(HIMC, DWORD, LPVOID, DWORD));
|
|
REGISTER(ImmGetCompositionWindow, BOOL (WINAPI*)(HIMC, LPCOMPOSITIONFORM));
|
|
REGISTER(ImmGetContext, HIMC (WINAPI*)(HWND));
|
|
REGISTER(ImmGetDefaultIMEWnd, HWND (WINAPI*)(HWND));
|
|
REGISTER(ImmIsIME, BOOL (WINAPI*)(HKL));
|
|
REGISTER(ImmReleaseContext, BOOL (WINAPI*)(HWND, HIMC));
|
|
REGISTER(ImmRegisterClient, BOOL(*)(PSHAREDINFO, HINSTANCE));
|
|
|
|
REGISTER(ImmGetCompositionFontW, BOOL (WINAPI*)(HIMC, LPLOGFONTW));
|
|
REGISTER(ImmGetCompositionFontA, BOOL (WINAPI*)(HIMC, LPLOGFONTA));
|
|
REGISTER(ImmSetCompositionFontW, BOOL (WINAPI*)(HIMC, LPLOGFONTW));
|
|
REGISTER(ImmSetCompositionFontA, BOOL (WINAPI*)(HIMC, LPLOGFONTA));
|
|
|
|
REGISTER(ImmSetCompositionWindow, BOOL(WINAPI*)(HIMC, LPCOMPOSITIONFORM));
|
|
REGISTER(ImmNotifyIME, BOOL (WINAPI*)(HIMC, DWORD, DWORD, DWORD));
|
|
REGISTER(ImmLockIMC, PINPUTCONTEXT(WINAPI*)(HIMC));
|
|
REGISTER(ImmUnlockIMC, BOOL (WINAPI*)(HIMC));
|
|
REGISTER(ImmLoadIME, BOOL (WINAPI*)(HKL));
|
|
REGISTER(ImmSetOpenStatus, BOOL (WINAPI*)(HIMC, BOOL));
|
|
REGISTER(ImmFreeLayout, BOOL (WINAPI*)(DWORD));
|
|
REGISTER(ImmActivateLayout, BOOL (WINAPI*)(HKL));
|
|
REGISTER(ImmGetCandidateWindow, BOOL (WINAPI*)(HIMC, DWORD, LPCANDIDATEFORM));
|
|
REGISTER(ImmSetCandidateWindow, BOOL (WINAPI*)(HIMC, LPCANDIDATEFORM));
|
|
REGISTER(ImmConfigureIMEW, BOOL (WINAPI*)(HKL, HWND, DWORD, LPVOID));
|
|
REGISTER(ImmGetConversionStatus, BOOL (WINAPI*)(HIMC, LPDWORD, LPDWORD));
|
|
REGISTER(ImmSetConversionStatus, BOOL (WINAPI*)(HIMC, DWORD, DWORD));
|
|
REGISTER(ImmSetStatusWindowPos, BOOL (WINAPI*)(HIMC, LPPOINT));
|
|
REGISTER(ImmGetImeInfoEx, BOOL (WINAPI*)(PIMEINFOEX, IMEINFOEXCLASS, PVOID));
|
|
REGISTER(ImmLockImeDpi, PIMEDPI (WINAPI*)(HKL));
|
|
REGISTER(ImmUnlockImeDpi, VOID (WINAPI*)(PIMEDPI));
|
|
REGISTER(ImmGetOpenStatus, BOOL (WINAPI*)(HIMC));
|
|
REGISTER(ImmSetActiveContext, BOOL (*)(HWND, HIMC, BOOL));
|
|
REGISTER(ImmTranslateMessage, BOOL (*)(HWND, UINT, WPARAM, LPARAM));
|
|
REGISTER(ImmLoadLayout, BOOL (*)(HKL, PIMEINFOEX));
|
|
REGISTER(ImmProcessKey, DWORD (*)(HWND, HKL, UINT, LPARAM, DWORD));
|
|
REGISTER(ImmPutImeMenuItemsIntoMappedFile, LRESULT(*)(HIMC));
|
|
REGISTER(ImmGetProperty, DWORD (WINAPI*)(HKL, DWORD));
|
|
REGISTER(ImmSetCompositionStringA,
|
|
BOOL (WINAPI*)(HIMC hImc, DWORD dwIndex, LPCVOID lpComp,
|
|
DWORD dwCompLen, LPCVOID lpRead, DWORD dwReadLen))
|
|
REGISTER(ImmSetCompositionStringW,
|
|
BOOL (WINAPI*)(HIMC hImc, DWORD dwIndex, LPCVOID lpComp,
|
|
DWORD dwCompLen, LPCVOID lpRead, DWORD dwReadLen));
|
|
REGISTER(ImmEnumInputContext,
|
|
BOOL (WINAPI*)(DWORD idThread, IMCENUMPROC lpfn, LPARAM lParam));
|
|
REGISTER(ImmSystemHandler,
|
|
LRESULT (WINAPI*)(HIMC, WPARAM, LPARAM));
|
|
|
|
#ifdef CUAS_ENABLE
|
|
// Cicero
|
|
REGISTER(CtfImmTIMActivate, HRESULT (WINAPI*)(HKL));
|
|
REGISTER(CtfImmRestoreToolbarWnd, VOID (WINAPI*)(DWORD));
|
|
REGISTER(CtfImmHideToolbarWnd, DWORD (WINAPI*)(VOID));
|
|
REGISTER(CtfImmDispatchDefImeMessage, LRESULT (WINAPI*)(HWND, UINT, WPARAM, LPARAM));
|
|
#endif // CUAS_ENABLE
|
|
}
|
|
|
|
BOOL bImmInitializing = FALSE;
|
|
|
|
VOID InitializeImmEntryTable(VOID)
|
|
{
|
|
bImmInitializing = TRUE;
|
|
_InitializeImmEntryTable();
|
|
}
|
|
|
|
|
|
FUNCLOG1(LOG_GENERAL, BOOL, DUMMYCALLINGTYPE, User32InitializeImmEntryTable, DWORD, magic)
|
|
BOOL User32InitializeImmEntryTable(DWORD magic)
|
|
{
|
|
if (magic != IMM_MAGIC_CALLER_ID) {
|
|
RIPMSG1(RIP_WARNING, "User32InitializeImmEntryTable: magic # does not match: 0x%08x", magic);
|
|
return FALSE;
|
|
}
|
|
|
|
if (((PVOID)gImmApiEntries.ImmWINNLSEnableIME) != ((PVOID)fakeImm_wd2)) {
|
|
// already initialized
|
|
return TRUE;
|
|
}
|
|
|
|
_InitializeImmEntryTable();
|
|
|
|
if (ghImm32 == NULL) {
|
|
if (!bImmInitializing) {
|
|
// increment the load counter of IMM32.DLL; application may call FreeLibrary later
|
|
WCHAR wszImmFile[MAX_PATH];
|
|
GetImmFileName(wszImmFile);
|
|
ghImm32 = LoadLibraryW(wszImmFile);
|
|
}
|
|
}
|
|
// for IMM initialization
|
|
return fpImmRegisterClient(&gSharedInfo, ghImm32);
|
|
}
|
|
|
|
//
|
|
// for historical reasons, these entries are put in user32.dll
|
|
//
|
|
|
|
FUNCLOG1(LOG_GENERAL, UINT, WINAPI, WINNLSGetIMEHotkey, HWND, hwndIme)
|
|
UINT WINAPI WINNLSGetIMEHotkey(HWND hwndIme)
|
|
{
|
|
UNREFERENCED_PARAMETER(hwndIme);
|
|
|
|
//
|
|
// Win95/NT3.51 behavior, i.e. always return 0.
|
|
//
|
|
return 0;
|
|
}
|
|
|
|
|
|
FUNCLOG2(LOG_GENERAL, BOOL, WINAPI, WINNLSEnableIME, HWND, hwnd, BOOL, bFlag)
|
|
BOOL WINAPI WINNLSEnableIME(HWND hwnd, BOOL bFlag)
|
|
{
|
|
return gImmApiEntries.ImmWINNLSEnableIME(hwnd, bFlag);
|
|
}
|
|
|
|
|
|
FUNCLOG1(LOG_GENERAL, BOOL, WINAPI, WINNLSGetEnableStatus, HWND, hwnd)
|
|
BOOL WINAPI WINNLSGetEnableStatus(HWND hwnd)
|
|
{
|
|
return gImmApiEntries.ImmWINNLSGetEnableStatus(hwnd);
|
|
}
|
|
|
|
|
|
FUNCLOG2(LOG_GENERAL, LRESULT, WINAPI, SendIMEMessageExW, HWND, hwnd, LPARAM, lParam)
|
|
LRESULT WINAPI SendIMEMessageExW(HWND hwnd, LPARAM lParam)
|
|
{
|
|
return gImmApiEntries.ImmSendIMEMessageExW(hwnd, lParam);
|
|
}
|
|
|
|
|
|
FUNCLOG2(LOG_GENERAL, LRESULT, WINAPI, SendIMEMessageExA, HWND, hwnd, LPARAM, lParam)
|
|
LRESULT WINAPI SendIMEMessageExA(HWND hwnd, LPARAM lParam)
|
|
{
|
|
return gImmApiEntries.ImmSendIMEMessageExA(hwnd, lParam);
|
|
}
|
|
|
|
|
|
FUNCLOG2(LOG_GENERAL, BOOL, WINAPI, IMPGetIMEW, HWND, hwnd, LPIMEPROW, lpImeProW)
|
|
BOOL WINAPI IMPGetIMEW(HWND hwnd, LPIMEPROW lpImeProW)
|
|
{
|
|
return gImmApiEntries.ImmIMPGetIMEW(hwnd, lpImeProW);
|
|
}
|
|
|
|
|
|
FUNCLOG2(LOG_GENERAL, BOOL, WINAPI, IMPGetIMEA, HWND, hwnd, LPIMEPROA, lpImeProA)
|
|
BOOL WINAPI IMPGetIMEA(HWND hwnd, LPIMEPROA lpImeProA)
|
|
{
|
|
return gImmApiEntries.ImmIMPGetIMEA(hwnd, lpImeProA);
|
|
}
|
|
|
|
|
|
FUNCLOG1(LOG_GENERAL, BOOL, WINAPI, IMPQueryIMEW, LPIMEPROW, lpImeProW)
|
|
BOOL WINAPI IMPQueryIMEW(LPIMEPROW lpImeProW)
|
|
{
|
|
return gImmApiEntries.ImmIMPQueryIMEW(lpImeProW);
|
|
}
|
|
|
|
|
|
FUNCLOG1(LOG_GENERAL, BOOL, WINAPI, IMPQueryIMEA, LPIMEPROA, lpImeProA)
|
|
BOOL WINAPI IMPQueryIMEA(LPIMEPROA lpImeProA)
|
|
{
|
|
return gImmApiEntries.ImmIMPQueryIMEA(lpImeProA);
|
|
}
|
|
|
|
|
|
FUNCLOG2(LOG_GENERAL, BOOL, WINAPI, IMPSetIMEW, HWND, hwnd, LPIMEPROW, lpImeProW)
|
|
BOOL WINAPI IMPSetIMEW(HWND hwnd, LPIMEPROW lpImeProW)
|
|
{
|
|
return gImmApiEntries.ImmIMPSetIMEW(hwnd, lpImeProW);
|
|
}
|
|
|
|
|
|
FUNCLOG2(LOG_GENERAL, BOOL, WINAPI, IMPSetIMEA, HWND, hwnd, LPIMEPROA, lpImeProA)
|
|
BOOL WINAPI IMPSetIMEA(HWND hwnd, LPIMEPROA lpImeProA)
|
|
{
|
|
return gImmApiEntries.ImmIMPSetIMEA(hwnd, lpImeProA);
|
|
}
|
|
|