mirror of
https://github.com/reactos/reactos.git
synced 2024-06-29 01:12:06 +00:00
[USER32] Load IMM table (#3215)
Implement the IMM function table in module user32.dll. CORE-11700 File immtable.h is located at win32ss/user/user32/include, that is a list of the DEFINE_IMM_ENTRY macro calls.
This commit is contained in:
parent
3f30b1eda7
commit
33fe4333f4
53
win32ss/user/user32/include/immtable.h
Normal file
53
win32ss/user/user32/include/immtable.h
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
/* DEFINE_IMM_ENTRY(type, name, params, retval, retkind) */
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmWINNLSEnableIME, (HWND hwnd, BOOL enable), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmWINNLSGetEnableStatus, (HWND hwnd), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(LRESULT, ImmSendIMEMessageExW, (HWND hwnd, LPARAM lParam), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(LRESULT, ImmSendIMEMessageExA, (HWND hwnd, LPARAM lParam), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmIMPGetIMEW, (HWND hwnd, LPIMEPROW ime), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmIMPGetIMEA, (HWND hwnd, LPIMEPROA ime), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmIMPQueryIMEW, (LPIMEPROW ime), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmIMPQueryIMEA, (LPIMEPROA ime), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmIMPSetIMEW, (HWND hwnd, LPIMEPROW ime), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmIMPSetIMEA, (HWND hwnd, LPIMEPROA ime), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(HIMC, ImmAssociateContext, (HWND hwnd, HIMC hIMC), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(LRESULT, ImmEscapeA, (HKL hKL, HIMC hIMC, UINT uEscape, LPVOID lpData), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(LRESULT, ImmEscapeW, (HKL hKL, HIMC hIMC, UINT uEscape, LPVOID lpData), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(LONG, ImmGetCompositionStringA, (HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(LONG, ImmGetCompositionStringW, (HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmGetCompositionWindow, (HIMC hIMC, LPCOMPOSITIONFORM lpCompForm), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(HIMC, ImmGetContext, (HWND hwnd), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(HWND, ImmGetDefaultIMEWnd, (HWND hwnd), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmIsIME, (HKL hKL), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmReleaseContext, (HWND hwnd, HIMC hIMC), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmRegisterClient, (/*PSHAREDINFO*/ LPVOID pInfo, HINSTANCE hInst), TRUE, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmGetCompositionFontW, (HIMC hIMC, LPLOGFONTW plf), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmGetCompositionFontA, (HIMC hIMC, LPLOGFONTA plf), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmSetCompositionFontW, (HIMC hIMC, LPLOGFONTW plf), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmSetCompositionFontA, (HIMC hIMC, LPLOGFONTA plf), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmSetCompositionWindow, (HIMC hIMC, LPCOMPOSITIONFORM lpCompForm), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmNotifyIME, (HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(/*PINPUTCONTEXT*/ LPVOID, ImmLockIMC, (HIMC hIMC), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmUnlockIMC, (HIMC hIMC), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmLoadIME, (HKL hKL), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmSetOpenStatus, (HIMC hIMC, BOOL bOpen), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmFreeLayout, (DWORD dwFlags), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmActivateLayout, (HKL hKL), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmSetCandidateWindow, (HIMC hIMC, LPCANDIDATEFORM lpCandForm), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmConfigureIMEW, (HKL hKL, HWND hWnd, DWORD dwMode, LPVOID lpData), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmGetConversionStatus, (HIMC hIMC, LPDWORD lpdwConversion, LPDWORD lpdwSentence), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmSetConversionStatus, (HIMC hIMC, DWORD dwConversion, DWORD dwSentence), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmSetStatusWindowPos, (HIMC hIMC, LPPOINT lppt), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmGetImeInfoEx, (PIMEINFOEX info, IMEINFOEXCLASS type, LPVOID pvKey), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(/*PIMEDPI*/ LPVOID, ImmLockImeDpi, (HKL hKL), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(VOID, ImmUnlockImeDpi, (/*PIMEDPI*/ LPVOID dpi), 0, VOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmGetOpenStatus, (HIMC hIMC), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmSetActiveContext, (HWND hwnd, HIMC hIMC, BOOL bFlag), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmTranslateMessage, (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmLoadLayout, (HKL hKL, PIMEINFOEX info), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(DWORD, ImmProcessKey, (HWND hwnd, HKL hKL, UINT uVKey, LPARAM lParam, DWORD dwHotKeyID), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(LRESULT, ImmPutImeMenuItemsIntoMappedFile, (HIMC hIMC), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(DWORD, ImmGetProperty, (HKL hKL, DWORD dwIndex), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmSetCompositionStringA, (HIMC hIMC, DWORD dwIndex, LPCVOID lpComp, DWORD dwCompLen, LPCVOID lpRead, DWORD dwReadLen), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmSetCompositionStringW, (HIMC hIMC, DWORD dwIndex, LPCVOID lpComp, DWORD dwCompLen, LPCVOID lpRead, DWORD dwReadLen), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(BOOL, ImmEnumInputContext, (DWORD dwThreadID, IMCENUMPROC lpfn, LPARAM lParam), 0, NONVOID)
|
||||||
|
DEFINE_IMM_ENTRY(LRESULT, ImmSystemHandler, (HIMC hIMC, WPARAM wParam, LPARAM lParam), 0, NONVOID)
|
|
@ -57,6 +57,8 @@
|
||||||
#include <wine/unicode.h>
|
#include <wine/unicode.h>
|
||||||
#include <wine/debug.h>
|
#include <wine/debug.h>
|
||||||
|
|
||||||
|
#include <winnls32.h>
|
||||||
|
|
||||||
/* Internal User32 Headers */
|
/* Internal User32 Headers */
|
||||||
#include "user32p.h"
|
#include "user32p.h"
|
||||||
|
|
||||||
|
|
|
@ -17,31 +17,24 @@
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
#include "ntwrapper.h"
|
#include "ntwrapper.h"
|
||||||
|
|
||||||
|
#define IMM_RETURN_VOID(retval) /* empty */
|
||||||
|
#define IMM_RETURN_NONVOID(retval) return (retval)
|
||||||
|
|
||||||
|
/* typedef FN_... */
|
||||||
|
#undef DEFINE_IMM_ENTRY
|
||||||
|
#define DEFINE_IMM_ENTRY(type, name, params, retval, retkind) \
|
||||||
|
typedef type (WINAPI *FN_##name)params;
|
||||||
|
#include "immtable.h"
|
||||||
|
|
||||||
|
/* define Imm32ApiTable */
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
BOOL (WINAPI* pImmIsIME) (HKL);
|
#undef DEFINE_IMM_ENTRY
|
||||||
LRESULT (WINAPI* pImmEscapeA) (HKL, HIMC, UINT, LPVOID);
|
#define DEFINE_IMM_ENTRY(type, name, params, retval, retkind) \
|
||||||
LRESULT (WINAPI* pImmEscapeW) (HKL, HIMC, UINT, LPVOID);
|
FN_##name p##name;
|
||||||
LONG (WINAPI* pImmGetCompositionStringA) (HIMC, DWORD, LPVOID, DWORD);
|
#include "immtable.h"
|
||||||
LONG (WINAPI* pImmGetCompositionStringW) (HIMC, DWORD, LPVOID, DWORD);
|
|
||||||
BOOL (WINAPI* pImmGetCompositionFontA) (HIMC, LPLOGFONTA);
|
|
||||||
BOOL (WINAPI* pImmGetCompositionFontW) (HIMC, LPLOGFONTW);
|
|
||||||
BOOL (WINAPI* pImmSetCompositionFontA)(HIMC, LPLOGFONTA);
|
|
||||||
BOOL (WINAPI* pImmSetCompositionFontW)(HIMC, LPLOGFONTW);
|
|
||||||
BOOL (WINAPI* pImmGetCompositionWindow) (HIMC, LPCOMPOSITIONFORM);
|
|
||||||
BOOL (WINAPI* pImmSetCompositionWindow) (HIMC, LPCOMPOSITIONFORM);
|
|
||||||
HIMC (WINAPI* pImmAssociateContext) (HWND, HIMC);
|
|
||||||
BOOL (WINAPI* pImmReleaseContext) (HWND, HIMC);
|
|
||||||
HIMC (WINAPI* pImmGetContext) (HWND);
|
|
||||||
HWND (WINAPI* pImmGetDefaultIMEWnd) (HWND);
|
|
||||||
BOOL (WINAPI* pImmNotifyIME) (HIMC, DWORD, DWORD, DWORD);
|
|
||||||
BOOL (WINAPI* pImmRegisterClient) (PVOID, HINSTANCE);
|
|
||||||
UINT (WINAPI* pImmProcessKey) (HWND, HKL, UINT, LPARAM, DWORD);
|
|
||||||
|
|
||||||
} Imm32ApiTable;
|
} Imm32ApiTable;
|
||||||
|
|
||||||
|
|
||||||
/* global variables */
|
/* global variables */
|
||||||
extern HINSTANCE User32Instance;
|
extern HINSTANCE User32Instance;
|
||||||
#define user32_module User32Instance
|
#define user32_module User32Instance
|
||||||
|
@ -61,6 +54,8 @@ extern HINSTANCE ghmodUserApiHook;
|
||||||
extern HICON hIconSmWindows, hIconWindows;
|
extern HICON hIconSmWindows, hIconWindows;
|
||||||
extern Imm32ApiTable gImmApiEntries;
|
extern Imm32ApiTable gImmApiEntries;
|
||||||
|
|
||||||
|
#define IMM_FN(name) gImmApiEntries.p##name
|
||||||
|
|
||||||
#define IS_ATOM(x) \
|
#define IS_ATOM(x) \
|
||||||
(((ULONG_PTR)(x) > 0x0) && ((ULONG_PTR)(x) < 0x10000))
|
(((ULONG_PTR)(x) > 0x0) && ((ULONG_PTR)(x) < 0x10000))
|
||||||
|
|
||||||
|
|
|
@ -3,46 +3,35 @@
|
||||||
* PROJECT: ReactOS user32.dll
|
* PROJECT: ReactOS user32.dll
|
||||||
* FILE: win32ss/user/user32/misc/imm.c
|
* FILE: win32ss/user/user32/misc/imm.c
|
||||||
* PURPOSE: User32.dll Imm functions
|
* PURPOSE: User32.dll Imm functions
|
||||||
* PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
|
* PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org)
|
||||||
|
* Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
|
||||||
* UPDATE HISTORY:
|
* UPDATE HISTORY:
|
||||||
* 01/27/2009 Created
|
* 01/27/2009 Created
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <user32.h>
|
#include <user32.h>
|
||||||
|
|
||||||
#include <winnls32.h>
|
|
||||||
#include <strsafe.h>
|
#include <strsafe.h>
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(user32);
|
WINE_DEFAULT_DEBUG_CHANNEL(user32);
|
||||||
|
|
||||||
#define IMM_INIT_MAGIC 0x19650412
|
#define IMM_INIT_MAGIC 0x19650412
|
||||||
|
|
||||||
|
|
||||||
Imm32ApiTable gImmApiEntries = {0};
|
|
||||||
HINSTANCE ghImm32 = NULL;
|
HINSTANCE ghImm32 = NULL;
|
||||||
BOOL bImmInitializing = FALSE;
|
BOOL bImmInitializing = FALSE;
|
||||||
BOOL ImmApiTableZero = TRUE;
|
|
||||||
|
|
||||||
|
/* define stub functions */
|
||||||
|
#undef DEFINE_IMM_ENTRY
|
||||||
|
#define DEFINE_IMM_ENTRY(type, name, params, retval, retkind) \
|
||||||
|
static type WINAPI IMMSTUB_##name params { IMM_RETURN_##retkind((type)retval); }
|
||||||
|
#include "immtable.h"
|
||||||
|
|
||||||
/*
|
Imm32ApiTable gImmApiEntries = {
|
||||||
* This function should not be implemented, it is used,
|
/* initialize by stubs */
|
||||||
* if you can not load function from imm32.dll
|
#undef DEFINE_IMM_ENTRY
|
||||||
*/
|
#define DEFINE_IMM_ENTRY(type, name, params, retval, retkind) \
|
||||||
BOOL WINAPI IMM_ImmIsIME(HKL hKL) { return 0; }
|
IMMSTUB_##name,
|
||||||
HIMC WINAPI IMM_ImmAssociateContext(HWND hwnd, HIMC himc) { return 0; }
|
#include "immtable.h"
|
||||||
BOOL WINAPI IMM_ImmReleaseContext(HWND hwnd, HIMC himc) { return 0; }
|
};
|
||||||
LRESULT WINAPI IMM_ImmEscapeAW(HKL hkl, HIMC himc, UINT uint, LPVOID lpvoid) { return 0; }
|
|
||||||
LONG WINAPI IMM_ImmGetCompositionStringAW(HIMC himc, DWORD dword1, LPVOID lpvoid, DWORD dword2) { return 0; }
|
|
||||||
BOOL WINAPI IMM_ImmGetCompositionFontA(HIMC himc, LPLOGFONTA lplf) { return 0; }
|
|
||||||
BOOL WINAPI IMM_ImmGetCompositionFontW(HIMC himc, LPLOGFONTW lplf) { return 0; }
|
|
||||||
BOOL WINAPI IMM_ImmSetCompositionFontA(HIMC himc, LPLOGFONTA lplf) { return 0; }
|
|
||||||
BOOL WINAPI IMM_ImmSetCompositionFontW(HIMC himc, LPLOGFONTW lplf) { return 0; }
|
|
||||||
BOOL WINAPI IMM_ImmSetGetCompositionWindow(HIMC himc, LPCOMPOSITIONFORM lpcf) { return 0; }
|
|
||||||
HIMC WINAPI IMM_ImmGetContext(HWND hwnd) { return 0; }
|
|
||||||
HWND WINAPI IMM_ImmGetDefaultIMEWnd(HWND hwnd) { return 0; }
|
|
||||||
BOOL WINAPI IMM_ImmNotifyIME(HIMC himc, DWORD dword1, DWORD dword2, DWORD dword3) { return 0; }
|
|
||||||
BOOL WINAPI IMM_ImmRegisterClient(PVOID ptr, HINSTANCE hMod) { return 0; }
|
|
||||||
UINT WINAPI IMM_ImmProcessKey(HWND hwnd, HKL hkl, UINT Vk, LPARAM lParam, DWORD HotKey) { return 0; }
|
|
||||||
|
|
||||||
HRESULT WINAPI GetImmFileName(PWSTR lpBuffer, UINT uSize)
|
HRESULT WINAPI GetImmFileName(PWSTR lpBuffer, UINT uSize)
|
||||||
{
|
{
|
||||||
|
@ -66,11 +55,8 @@ BOOL WINAPI IntInitializeImmEntryTable(VOID)
|
||||||
WCHAR ImmFile[MAX_PATH];
|
WCHAR ImmFile[MAX_PATH];
|
||||||
HMODULE imm32 = ghImm32;
|
HMODULE imm32 = ghImm32;
|
||||||
|
|
||||||
if (gImmApiEntries.pImmIsIME != 0)
|
if (IMM_FN(ImmWINNLSEnableIME) != IMMSTUB_ImmWINNLSEnableIME)
|
||||||
{
|
return TRUE;
|
||||||
ERR("Imm Api Table Init 1\n");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
GetImmFileName(ImmFile, sizeof(ImmFile));
|
GetImmFileName(ImmFile, sizeof(ImmFile));
|
||||||
TRACE("File %ws\n",ImmFile);
|
TRACE("File %ws\n",ImmFile);
|
||||||
|
@ -91,91 +77,16 @@ BOOL WINAPI IntInitializeImmEntryTable(VOID)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ImmApiTableZero)
|
/* load imm procedures */
|
||||||
{
|
#undef DEFINE_IMM_ENTRY
|
||||||
ImmApiTableZero = FALSE;
|
#define DEFINE_IMM_ENTRY(type, name, params, retval, retkind) \
|
||||||
ZeroMemory(&gImmApiEntries, sizeof(Imm32ApiTable));
|
do { \
|
||||||
}
|
FN_##name proc = (FN_##name)GetProcAddress(imm32, #name); \
|
||||||
|
if (proc) { \
|
||||||
gImmApiEntries.pImmIsIME = (BOOL (WINAPI*)(HKL)) GetProcAddress(imm32, "ImmIsIME");
|
IMM_FN(name) = proc; \
|
||||||
if (!gImmApiEntries.pImmIsIME)
|
} \
|
||||||
gImmApiEntries.pImmIsIME = IMM_ImmIsIME;
|
} while (0);
|
||||||
|
#include "immtable.h"
|
||||||
gImmApiEntries.pImmEscapeA = (LRESULT (WINAPI*)(HKL, HIMC, UINT, LPVOID)) GetProcAddress(imm32, "ImmEscapeA");
|
|
||||||
if (!gImmApiEntries.pImmEscapeA)
|
|
||||||
gImmApiEntries.pImmEscapeA = IMM_ImmEscapeAW;
|
|
||||||
|
|
||||||
gImmApiEntries.pImmEscapeW = (LRESULT (WINAPI*)(HKL, HIMC, UINT, LPVOID)) GetProcAddress(imm32, "ImmEscapeW");
|
|
||||||
if (!gImmApiEntries.pImmEscapeW)
|
|
||||||
gImmApiEntries.pImmEscapeW = IMM_ImmEscapeAW;
|
|
||||||
|
|
||||||
gImmApiEntries.pImmGetCompositionStringA = (LONG (WINAPI*)(HIMC, DWORD, LPVOID, DWORD)) GetProcAddress(imm32, "ImmGetCompositionStringA");
|
|
||||||
if (!gImmApiEntries.pImmGetCompositionStringA)
|
|
||||||
gImmApiEntries.pImmGetCompositionStringA = IMM_ImmGetCompositionStringAW;
|
|
||||||
|
|
||||||
gImmApiEntries.pImmGetCompositionStringW = (LONG (WINAPI*)(HIMC, DWORD, LPVOID, DWORD)) GetProcAddress(imm32, "ImmGetCompositionStringW");
|
|
||||||
if (!gImmApiEntries.pImmGetCompositionStringW)
|
|
||||||
gImmApiEntries.pImmGetCompositionStringW = IMM_ImmGetCompositionStringAW;
|
|
||||||
|
|
||||||
gImmApiEntries.pImmGetCompositionFontA = (BOOL (WINAPI*)(HIMC, LPLOGFONTA)) GetProcAddress(imm32, "ImmGetCompositionFontA");
|
|
||||||
if (!gImmApiEntries.pImmGetCompositionFontA)
|
|
||||||
gImmApiEntries.pImmGetCompositionFontA = IMM_ImmGetCompositionFontA;
|
|
||||||
|
|
||||||
gImmApiEntries.pImmGetCompositionFontW = (BOOL (WINAPI*)(HIMC, LPLOGFONTW)) GetProcAddress(imm32, "ImmGetCompositionFontW");
|
|
||||||
if (!gImmApiEntries.pImmGetCompositionFontW)
|
|
||||||
gImmApiEntries.pImmGetCompositionFontW = IMM_ImmGetCompositionFontW;
|
|
||||||
|
|
||||||
gImmApiEntries.pImmSetCompositionFontA = (BOOL (WINAPI*)(HIMC, LPLOGFONTA)) GetProcAddress(imm32, "ImmSetCompositionFontA");
|
|
||||||
if (!gImmApiEntries.pImmSetCompositionFontA)
|
|
||||||
gImmApiEntries.pImmSetCompositionFontA = IMM_ImmSetCompositionFontA;
|
|
||||||
|
|
||||||
gImmApiEntries.pImmSetCompositionFontW = (BOOL (WINAPI*)(HIMC, LPLOGFONTW)) GetProcAddress(imm32, "ImmSetCompositionFontW");
|
|
||||||
if (!gImmApiEntries.pImmSetCompositionFontW)
|
|
||||||
gImmApiEntries.pImmSetCompositionFontW = IMM_ImmSetCompositionFontW;
|
|
||||||
|
|
||||||
gImmApiEntries.pImmGetCompositionWindow = (BOOL (WINAPI*)(HIMC, LPCOMPOSITIONFORM)) GetProcAddress(imm32, "ImmGetCompositionWindow");
|
|
||||||
if (!gImmApiEntries.pImmGetCompositionWindow)
|
|
||||||
gImmApiEntries.pImmGetCompositionWindow = IMM_ImmSetGetCompositionWindow;
|
|
||||||
|
|
||||||
gImmApiEntries.pImmSetCompositionWindow = (BOOL (WINAPI*)(HIMC, LPCOMPOSITIONFORM)) GetProcAddress(imm32, "ImmSetCompositionWindow");
|
|
||||||
if (!gImmApiEntries.pImmSetCompositionWindow)
|
|
||||||
gImmApiEntries.pImmSetCompositionWindow = IMM_ImmSetGetCompositionWindow;
|
|
||||||
|
|
||||||
gImmApiEntries.pImmAssociateContext = (HIMC (WINAPI*)(HWND, HIMC)) GetProcAddress(imm32, "ImmAssociateContext");
|
|
||||||
if (!gImmApiEntries.pImmAssociateContext)
|
|
||||||
gImmApiEntries.pImmAssociateContext = IMM_ImmAssociateContext;
|
|
||||||
|
|
||||||
gImmApiEntries.pImmReleaseContext = (BOOL (WINAPI*)(HWND, HIMC)) GetProcAddress(imm32, "ImmReleaseContext");
|
|
||||||
if (!gImmApiEntries.pImmReleaseContext)
|
|
||||||
gImmApiEntries.pImmReleaseContext = IMM_ImmReleaseContext;
|
|
||||||
|
|
||||||
gImmApiEntries.pImmGetContext = (HIMC (WINAPI*)(HWND)) GetProcAddress(imm32, "ImmGetContext");
|
|
||||||
if (!gImmApiEntries.pImmGetContext)
|
|
||||||
gImmApiEntries.pImmGetContext = IMM_ImmGetContext;
|
|
||||||
|
|
||||||
gImmApiEntries.pImmGetDefaultIMEWnd = (HWND (WINAPI*)(HWND)) GetProcAddress(imm32, "ImmGetDefaultIMEWnd");
|
|
||||||
if (!gImmApiEntries.pImmGetDefaultIMEWnd)
|
|
||||||
gImmApiEntries.pImmGetDefaultIMEWnd = IMM_ImmGetDefaultIMEWnd;
|
|
||||||
|
|
||||||
gImmApiEntries.pImmNotifyIME = (BOOL (WINAPI*)(HIMC, DWORD, DWORD, DWORD)) GetProcAddress(imm32, "ImmNotifyIME");
|
|
||||||
if (!gImmApiEntries.pImmNotifyIME)
|
|
||||||
gImmApiEntries.pImmNotifyIME = IMM_ImmNotifyIME;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* TODO: Load more functions from imm32.dll
|
|
||||||
* Function like IMPSetIMEW, IMPQueryIMEW etc. call functions
|
|
||||||
* from imm32.dll through pointers in the structure gImmApiEntries.
|
|
||||||
* I do not know whether it is necessary to initialize a table
|
|
||||||
* of functions to load user32 (DLL_PROCESS_ATTACH)
|
|
||||||
*/
|
|
||||||
|
|
||||||
gImmApiEntries.pImmRegisterClient = (BOOL (WINAPI*)(PVOID, HINSTANCE)) GetProcAddress(imm32, "ImmRegisterClient");
|
|
||||||
if (!gImmApiEntries.pImmRegisterClient)
|
|
||||||
gImmApiEntries.pImmRegisterClient = IMM_ImmRegisterClient;
|
|
||||||
|
|
||||||
gImmApiEntries.pImmProcessKey = (UINT (WINAPI*)(HWND, HKL, UINT, LPARAM, DWORD)) GetProcAddress(imm32, "ImmProcessKey");
|
|
||||||
if (!gImmApiEntries.pImmProcessKey)
|
|
||||||
gImmApiEntries.pImmProcessKey = IMM_ImmProcessKey;
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -212,12 +123,7 @@ BOOL WINAPI User32InitializeImmEntryTable(DWORD magic)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if 0 // For real Imm32.dll testing!!!!
|
|
||||||
if (ghImm32 && !gImmApiEntries.pImmRegisterClient(&gSharedInfo, ghImm32))
|
|
||||||
{
|
|
||||||
ERR("Wine is stubed!\n");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -349,113 +255,103 @@ BOOL WINAPI CliImmSetHotKey(DWORD dwID, UINT uModifiers, UINT uVirtualKey, HKL h
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
IMPSetIMEW(HWND hwnd, LPIMEPROW ime)
|
IMPSetIMEW(HWND hwnd, LPIMEPROW ime)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
return IMM_FN(ImmIMPSetIMEW)(hwnd, ime);
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
IMPQueryIMEW(LPIMEPROW ime)
|
IMPQueryIMEW(LPIMEPROW ime)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
return IMM_FN(ImmIMPQueryIMEW)(ime);
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
IMPGetIMEW(HWND hwnd, LPIMEPROW ime)
|
IMPGetIMEW(HWND hwnd, LPIMEPROW ime)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
return IMM_FN(ImmIMPGetIMEW)(hwnd, ime);
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
IMPSetIMEA(HWND hwnd, LPIMEPROA ime)
|
IMPSetIMEA(HWND hwnd, LPIMEPROA ime)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
return IMM_FN(ImmIMPSetIMEA)(hwnd, ime);
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
IMPQueryIMEA(LPIMEPROA ime)
|
IMPQueryIMEA(LPIMEPROA ime)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
return IMM_FN(ImmIMPQueryIMEA)(ime);
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
IMPGetIMEA(HWND hwnd, LPIMEPROA ime)
|
IMPGetIMEA(HWND hwnd, LPIMEPROA ime)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
return IMM_FN(ImmIMPGetIMEA)(hwnd, ime);
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
LRESULT
|
LRESULT
|
||||||
WINAPI
|
WINAPI
|
||||||
SendIMEMessageExW(HWND hwnd, LPARAM lparam)
|
SendIMEMessageExW(HWND hwnd, LPARAM lParam)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
return IMM_FN(ImmSendIMEMessageExW)(hwnd, lParam);
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
LRESULT
|
LRESULT
|
||||||
WINAPI
|
WINAPI
|
||||||
SendIMEMessageExA(HWND hwnd, LPARAM lparam)
|
SendIMEMessageExA(HWND hwnd, LPARAM lParam)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
return IMM_FN(ImmSendIMEMessageExA)(hwnd, lParam);
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
WINNLSEnableIME(HWND hwnd, BOOL enable)
|
WINNLSEnableIME(HWND hwnd, BOOL enable)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
return IMM_FN(ImmWINNLSEnableIME)(hwnd, enable);
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
WINNLSGetEnableStatus(HWND hwnd)
|
WINNLSGetEnableStatus(HWND hwnd)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
return IMM_FN(ImmWINNLSGetEnableStatus)(hwnd);
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,52 +0,0 @@
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmWINNLSEnableIME, (HWND, BOOL))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmWINNLSGetEnableStatus, (HWND))
|
|
||||||
DEFINE_IMM_ENTRY(LRESULT, ImmSendIMEMessageExW, (HWND, LPARAM))
|
|
||||||
DEFINE_IMM_ENTRY(LRESULT, ImmSendIMEMessageExA, (HWND, LPARAM))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmIMPGetIMEW, (HWND, LPIMEPROW))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmIMPGetIMEA, (HWND, LPIMEPROA))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmIMPQueryIMEW, (LPIMEPROW))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmIMPQueryIMEA, (LPIMEPROA))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmIMPSetIMEW, (HWND, LPIMEPROW))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmIMPSetIMEA, (HWND, LPIMEPROA))
|
|
||||||
DEFINE_IMM_ENTRY(HIMC, ImmAssociateContext, (HWND, HIMC))
|
|
||||||
DEFINE_IMM_ENTRY(LRESULT, ImmEscapeA, (HKL, HIMC, UINT, LPVOID))
|
|
||||||
DEFINE_IMM_ENTRY(LRESULT, ImmEscapeW, (HKL, HIMC, UINT, LPVOID))
|
|
||||||
DEFINE_IMM_ENTRY(LONG, ImmGetCompositionStringA, (HIMC, DWORD, LPVOID, DWORD))
|
|
||||||
DEFINE_IMM_ENTRY(LONG, ImmGetCompositionStringW, (HIMC, DWORD, LPVOID, DWORD))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmGetCompositionWindow, (HIMC, LPCOMPOSITIONFORM))
|
|
||||||
DEFINE_IMM_ENTRY(HIMC, ImmGetContext, (HWND))
|
|
||||||
DEFINE_IMM_ENTRY(HWND, ImmGetDefaultIMEWnd, (HWND))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmIsIME, (HKL))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmReleaseContext, (HWND, HIMC))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmRegisterClient, (/*PSHAREDINFO*/ LPVOID, HINSTANCE))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmGetCompositionFontW, (HIMC, LPLOGFONTW))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmGetCompositionFontA, (HIMC, LPLOGFONTA))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmSetCompositionFontW, (HIMC, LPLOGFONTW))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmSetCompositionFontA, (HIMC, LPLOGFONTA))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmSetCompositionWindow, (HIMC, LPCOMPOSITIONFORM))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmNotifyIME, (HIMC, DWORD, DWORD, DWORD))
|
|
||||||
DEFINE_IMM_ENTRY(PINPUTCONTEXT, ImmLockIMC, (HIMC))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmUnlockIMC, (HIMC))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmLoadIME, (HKL))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmSetOpenStatus, (HIMC, BOOL))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmFreeLayout, (DWORD))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmActivateLayout, (HKL))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmSetCandidateWindow, (HIMC, LPCANDIDATEFORM))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmConfigureIMEW, (HKL, HWND, DWORD, LPVOID))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmGetConversionStatus, (HIMC, LPDWORD, LPDWORD))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmSetConversionStatus, (HIMC, DWORD, DWORD))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmSetStatusWindowPos, (HIMC, LPPOINT))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmGetImeInfoEx, (PIMEINFOEX, IMEINFOEXCLASS, LPVOID))
|
|
||||||
DEFINE_IMM_ENTRY(PIMEDPI, ImmLockImeDpi, (HKL))
|
|
||||||
DEFINE_IMM_ENTRY(VOID, ImmUnlockImeDpi, (/*PIMEDPI*/ LPVOID))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmGetOpenStatus, (HIMC))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmSetActiveContext, (HWND, HIMC, BOOL))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmTranslateMessage, (HWND, UINT, WPARAM, LPARAM))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmLoadLayout, (HKL, PIMEINFOEX))
|
|
||||||
DEFINE_IMM_ENTRY(DWORD, ImmProcessKey, (HWND, HKL, UINT, LPARAM, DWORD))
|
|
||||||
DEFINE_IMM_ENTRY(LRESULT, ImmPutImeMenuItemsIntoMappedFile, (HIMC))
|
|
||||||
DEFINE_IMM_ENTRY(DWORD, ImmGetProperty, (HKL, DWORD))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmSetCompositionStringA, (HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmSetCompositionStringW, (HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD))
|
|
||||||
DEFINE_IMM_ENTRY(BOOL, ImmEnumInputContext, (DWORD, IMCENUMPROC, LPARAM))
|
|
||||||
DEFINE_IMM_ENTRY(LRESULT, ImmSystemHandler, (HIMC, WPARAM, LPARAM))
|
|
Loading…
Reference in a new issue