From 17617221ce3b488d1c8ec2f24cfd5fc0eabcf627 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Mon, 11 Dec 2023 22:37:25 +0900 Subject: [PATCH] [MSCTFIME][SDK][USER32] Add msctfime.ime (stub) (#6141) ## Overview 1. msctfime.ime is an IME file interface for new-style IMEs a.k.a. "Text Input Processors" (TIPs). 2. msctfime.ime is loaded as old-style IME file at ImmLoadLayout in specific condition. 3. msctfime.ime communicates with the current TIP (This feature is not implemented yet). ## Proposed changes - Add msctfime module at dll/ime/msctfime. - The functions in this module are currently stub. - Move IME file interface declarations from to . - Modify ImmNotifyIME, NotifyIME, and ImeProcessKey prototypes for x64 compliance. CORE-19360 --- dll/CMakeLists.txt | 1 + dll/ime/CMakeLists.txt | 2 + dll/ime/msctfime/CMakeLists.txt | 21 ++ dll/ime/msctfime/lang/en-US.rc | 23 ++ dll/ime/msctfime/msctfime.c | 350 +++++++++++++++++++++++++ dll/ime/msctfime/msctfime.h | 24 ++ dll/ime/msctfime/msctfime.rc | 32 +++ dll/ime/msctfime/msctfime.spec | 30 +++ dll/ime/msctfime/res/down.ico | Bin 0 -> 3438 bytes dll/ime/msctfime/res/unicode.ico | Bin 0 -> 326 bytes dll/ime/msctfime/resource.h | 16 ++ dll/win32/imm32/ime.c | 2 +- dll/win32/imm32/imm32.spec | 4 +- sdk/include/ddk/immdev.h | 109 ++++++++ sdk/include/psdk/imm.h | 19 +- sdk/include/reactos/imetable.h | 4 +- win32ss/user/user32/include/immtable.h | 2 +- 17 files changed, 615 insertions(+), 24 deletions(-) create mode 100644 dll/ime/CMakeLists.txt create mode 100644 dll/ime/msctfime/CMakeLists.txt create mode 100644 dll/ime/msctfime/lang/en-US.rc create mode 100644 dll/ime/msctfime/msctfime.c create mode 100644 dll/ime/msctfime/msctfime.h create mode 100644 dll/ime/msctfime/msctfime.rc create mode 100644 dll/ime/msctfime/msctfime.spec create mode 100644 dll/ime/msctfime/res/down.ico create mode 100644 dll/ime/msctfime/res/unicode.ico create mode 100644 dll/ime/msctfime/resource.h diff --git a/dll/CMakeLists.txt b/dll/CMakeLists.txt index 08458544df7..7fd670b6b6d 100644 --- a/dll/CMakeLists.txt +++ b/dll/CMakeLists.txt @@ -4,6 +4,7 @@ add_subdirectory(apisets) add_subdirectory(appcompat) add_subdirectory(cpl) add_subdirectory(directx) +add_subdirectory(ime) add_subdirectory(keyboard) add_subdirectory(nls) add_subdirectory(np) diff --git a/dll/ime/CMakeLists.txt b/dll/ime/CMakeLists.txt new file mode 100644 index 00000000000..1c5abaad63a --- /dev/null +++ b/dll/ime/CMakeLists.txt @@ -0,0 +1,2 @@ + +add_subdirectory(msctfime) diff --git a/dll/ime/msctfime/CMakeLists.txt b/dll/ime/msctfime/CMakeLists.txt new file mode 100644 index 00000000000..3925158f4a3 --- /dev/null +++ b/dll/ime/msctfime/CMakeLists.txt @@ -0,0 +1,21 @@ + +include_directories( + ${REACTOS_SOURCE_DIR}/win32ss/include) + +spec2def(msctfime.ime msctfime.spec) + +list(APPEND SOURCE + msctfime.c) + +file(GLOB msctfime_rc_deps res/*.*) +add_rc_deps(msctfime.rc ${msctfime_rc_deps}) + +add_library(msctfime MODULE + ${SOURCE} + msctfime.rc + ${CMAKE_CURRENT_BINARY_DIR}/msctfime.def) +set_module_type(msctfime win32dll UNICODE) +set_target_properties(msctfime PROPERTIES SUFFIX ".ime") +target_link_libraries(msctfime wine uuid) +add_importlibs(msctfime user32 gdi32 advapi32 comctl32 msvcrt kernel32 ntdll) +add_cd_file(TARGET msctfime DESTINATION reactos/system32 FOR all) diff --git a/dll/ime/msctfime/lang/en-US.rc b/dll/ime/msctfime/lang/en-US.rc new file mode 100644 index 00000000000..584b75546ee --- /dev/null +++ b/dll/ime/msctfime/lang/en-US.rc @@ -0,0 +1,23 @@ +/* + * PROJECT: ReactOS msctfime.ime + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: English (United States) resource file + * TRANSLATOR: Copyright 2023 Katayama Hirofumi MZ + */ + +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +STRINGTABLE +BEGIN + IDS_OK "OK" + IDS_CANCEL "Cancel" + IDS_ABORT "&Abort" + IDS_RETRY "&Retry" + IDS_IGNORE "&Ignore" + IDS_YES "&Yes" + IDS_NO "&No" + + IDS_ENTER "Enter" + IDS_FINALIZE_STRING "Finalize the string" + IDS_CONVERSION "Conversion" +END diff --git a/dll/ime/msctfime/msctfime.c b/dll/ime/msctfime/msctfime.c new file mode 100644 index 00000000000..93865f49255 --- /dev/null +++ b/dll/ime/msctfime/msctfime.c @@ -0,0 +1,350 @@ +/* + * PROJECT: ReactOS msctfime.ime + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: Supporting IME interface of Text Input Processors (TIPs) + * COPYRIGHT: Copyright 2023 Katayama Hirofumi MZ + */ + +#include "msctfime.h" + +WINE_DEFAULT_DEBUG_CHANNEL(msctfime); + +HINSTANCE g_hInst = NULL; /* The instance of this module */ + +BOOL WINAPI +ImeInquire( + _Out_ LPIMEINFO lpIMEInfo, + _Out_ LPWSTR lpszWndClass, + _In_ DWORD dwSystemInfoFlags) +{ + FIXME("stub:(%p, %p, 0x%lX)\n", lpIMEInfo, lpszWndClass, dwSystemInfoFlags); + return FALSE; +} + +DWORD WINAPI +ImeConversionList( + _In_ HIMC hIMC, + _In_ LPCWSTR lpSrc, + _Out_ LPCANDIDATELIST lpDst, + _In_ DWORD dwBufLen, + _In_ UINT uFlag) +{ + FIXME("stub:(%p, %s, %p, 0x%lX, %u)\n", hIMC, debugstr_w(lpSrc), lpDst, dwBufLen, uFlag); + return 0; +} + +BOOL WINAPI +ImeRegisterWord( + _In_ LPCWSTR lpszReading, + _In_ DWORD dwStyle, + _In_ LPCWSTR lpszString) +{ + FIXME("stub:(%s, 0x%lX, %s)\n", debugstr_w(lpszReading), dwStyle, debugstr_w(lpszString)); + return FALSE; +} + +BOOL WINAPI +ImeUnregisterWord( + _In_ LPCWSTR lpszReading, + _In_ DWORD dwStyle, + _In_ LPCWSTR lpszString) +{ + FIXME("stub:(%s, 0x%lX, %s)\n", debugstr_w(lpszReading), dwStyle, debugstr_w(lpszString)); + return FALSE; +} + +UINT WINAPI +ImeGetRegisterWordStyle( + _In_ UINT nItem, + _Out_ LPSTYLEBUFW lpStyleBuf) +{ + FIXME("stub:(%u, %p)\n", nItem, lpStyleBuf); + return 0; +} + +UINT WINAPI +ImeEnumRegisterWord( + _In_ REGISTERWORDENUMPROCW lpfnEnumProc, + _In_opt_ LPCWSTR lpszReading, + _In_ DWORD dwStyle, + _In_opt_ LPCWSTR lpszString, + _In_opt_ LPVOID lpData) +{ + FIXME("stub:(%p, %s, %lu, %s, %p)\n", lpfnEnumProc, debugstr_w(lpszReading), + dwStyle, debugstr_w(lpszString), lpData); + return 0; +} + +BOOL WINAPI +ImeConfigure( + _In_ HKL hKL, + _In_ HWND hWnd, + _In_ DWORD dwMode, + _Inout_opt_ LPVOID lpData) +{ + FIXME("stub:(%p, %p, %lu, %p)\n", hKL, hWnd, dwMode, lpData); + return FALSE; +} + +BOOL WINAPI +ImeDestroy( + _In_ UINT uReserved) +{ + FIXME("stub:(%u)\n", uReserved); + return FALSE; +} + +LRESULT WINAPI +ImeEscape( + _In_ HIMC hIMC, + _In_ UINT uEscape, + _Inout_opt_ LPVOID lpData) +{ + FIXME("stub:(%p, %u, %p)\n", hIMC, uEscape, lpData); + return 0; +} + +BOOL WINAPI +ImeProcessKey( + _In_ HIMC hIMC, + _In_ UINT uVirKey, + _In_ LPARAM lParam, + _In_ CONST LPBYTE lpbKeyState) +{ + FIXME("stub:(%p, %u, %p, lpbKeyState)\n", hIMC, uVirKey, lParam, lpbKeyState); + return FALSE; +} + +BOOL WINAPI +ImeSelect( + _In_ HIMC hIMC, + _In_ BOOL fSelect) +{ + FIXME("stub:(%p, %u)\n", hIMC, fSelect); + return FALSE; +} + +BOOL WINAPI +ImeSetActiveContext( + _In_ HIMC hIMC, + _In_ BOOL fFlag) +{ + FIXME("stub:(%p, %u)\n", hIMC, fFlag); + return FALSE; +} + +UINT WINAPI +ImeToAsciiEx( + _In_ UINT uVirKey, + _In_ UINT uScanCode, + _In_ CONST LPBYTE lpbKeyState, + _Out_ LPTRANSMSGLIST lpTransMsgList, + _In_ UINT fuState, + _In_ HIMC hIMC) +{ + FIXME("stub:(%u, %u, %p, %p, %u, %p)\n", uVirKey, uScanCode, lpbKeyState, lpTransMsgList, + fuState, hIMC); + return 0; +} + +BOOL WINAPI +NotifyIME( + _In_ HIMC hIMC, + _In_ DWORD dwAction, + _In_ DWORD dwIndex, + _In_ DWORD_PTR dwValue) +{ + FIXME("stub:(%p, 0x%lX, 0x%lX, %p)\n", hIMC, dwAction, dwIndex, dwValue); + return FALSE; +} + +BOOL WINAPI +ImeSetCompositionString( + _In_ HIMC hIMC, + _In_ DWORD dwIndex, + _In_opt_ LPCVOID lpComp, + _In_ DWORD dwCompLen, + _In_opt_ LPCVOID lpRead, + _In_ DWORD dwReadLen) +{ + FIXME("stub:(%p, 0x%lX, %p, 0x%lX, %p, 0x%lX)\n", hIMC, dwIndex, lpComp, dwCompLen, + lpRead, dwReadLen); + return FALSE; +} + +DWORD WINAPI +ImeGetImeMenuItems( + _In_ HIMC hIMC, + _In_ DWORD dwFlags, + _In_ DWORD dwType, + _Inout_opt_ LPIMEMENUITEMINFOW lpImeParentMenu, + _Inout_opt_ LPIMEMENUITEMINFOW lpImeMenu, + _In_ DWORD dwSize) +{ + FIXME("stub:(%p, 0x%lX, 0x%lX, %p, %p, 0x%lX)\n", hIMC, dwFlags, dwType, lpImeParentMenu, + lpImeMenu, dwSize); + return 0; +} + +BOOL WINAPI +CtfImeInquireExW( + _Out_ LPIMEINFO lpIMEInfo, + _Out_ LPWSTR lpszWndClass, + _In_ DWORD dwSystemInfoFlags, + _In_ HKL hKL) +{ + FIXME("stub:(%p, %p, 0x%lX, %p)\n", lpIMEInfo, lpszWndClass, dwSystemInfoFlags, hKL); + return FALSE; +} + +BOOL WINAPI +CtfImeSelectEx( + _In_ HIMC hIMC, + _In_ BOOL fSelect, + _In_ HKL hKL) +{ + FIXME("stub:(%p, %d, %p)\n", hIMC, fSelect, hKL); + return FALSE; +} + +LRESULT WINAPI +CtfImeEscapeEx( + _In_ HIMC hIMC, + _In_ UINT uSubFunc, + _Inout_opt_ LPVOID lpData, + _In_ HKL hKL) +{ + FIXME("stub:(%p, %u, %p, %p)\n", hIMC, uSubFunc, lpData, hKL); + return 0; +} + +HRESULT WINAPI +CtfImeGetGuidAtom( + _In_ HIMC hIMC, + _In_ DWORD dwUnknown, + _Out_opt_ LPDWORD pdwGuidAtom) +{ + FIXME("stub:(%p, 0x%lX, %p)\n", hIMC, dwUnknown, pdwGuidAtom); + return E_FAIL; +} + +BOOL WINAPI +CtfImeIsGuidMapEnable( + _In_ HIMC hIMC) +{ + FIXME("stub:(%p)\n", hIMC); + return FALSE; +} + +HRESULT WINAPI +CtfImeCreateThreadMgr(VOID) +{ + FIXME("stub:()\n"); + return E_NOTIMPL; +} + +HRESULT WINAPI +CtfImeDestroyThreadMgr(VOID) +{ + FIXME("stub:()\n"); + return E_NOTIMPL; +} + +HRESULT WINAPI +CtfImeCreateInputContext( + _In_ HIMC hIMC) +{ + return E_NOTIMPL; +} + +HRESULT WINAPI +CtfImeDestroyInputContext( + _In_ HIMC hIMC) +{ + FIXME("stub:(%p)\n", hIMC); + return E_NOTIMPL; +} + +HRESULT WINAPI +CtfImeSetActiveContextAlways( + _In_ HIMC hIMC, + _In_ BOOL fActive, + _In_ HWND hWnd, + _In_ HKL hKL) +{ + FIXME("stub:(%p, %d, %p, %p)\n", hIMC, fActive, hWnd, hKL); + return E_NOTIMPL; +} + +HRESULT WINAPI +CtfImeProcessCicHotkey( + _In_ HIMC hIMC, + _In_ UINT vKey, + _In_ LPARAM lParam) +{ + FIXME("stub:(%p, %u, %p)\n", hIMC, vKey, lParam); + return E_NOTIMPL; +} + +LRESULT WINAPI +CtfImeDispatchDefImeMessage( + _In_ HWND hWnd, + _In_ UINT uMsg, + _In_ WPARAM wParam, + _In_ LPARAM lParam) +{ + FIXME("stub:(%p, %u, %p, %p)\n", hWnd, uMsg, wParam, lParam); + return 0; +} + +BOOL WINAPI +CtfImeIsIME( + _In_ HKL hKL) +{ + FIXME("stub:(%p)\n", hKL); + return FALSE; +} + +HRESULT WINAPI +CtfImeThreadDetach(VOID) +{ + ImeDestroy(0); + return S_OK; +} + +LRESULT CALLBACK +UIWndProc( + _In_ HWND hWnd, + _In_ UINT uMsg, + _In_ WPARAM wParam, + _In_ LPARAM lParam) +{ + if (uMsg == WM_CREATE) + { + FIXME("stub\n"); + return -1; + } + return 0; +} + +BOOL WINAPI +DllMain( + _In_ HINSTANCE hinstDLL, + _In_ DWORD dwReason, + _Inout_opt_ LPVOID lpvReserved) +{ + switch (dwReason) + { + case DLL_PROCESS_ATTACH: + { + TRACE("(%p, %lu, %p)\n", hinstDLL, dwReason, lpvReserved); + g_hInst = hinstDLL; + break; + } + case DLL_PROCESS_DETACH: + { + break; + } + } + return TRUE; +} diff --git a/dll/ime/msctfime/msctfime.h b/dll/ime/msctfime/msctfime.h new file mode 100644 index 00000000000..bdabd0f2e31 --- /dev/null +++ b/dll/ime/msctfime/msctfime.h @@ -0,0 +1,24 @@ +/* + * PROJECT: ReactOS msctfime.ime + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: Supporting IME interface of Text Input Processors (TIPs) + * COPYRIGHT: Copyright 2023 Katayama Hirofumi MZ + */ + +#pragma once + +#include + +#define WIN32_NO_STATUS +#define COBJMACROS + +#include +#include +#include +#include + +#include + +#include "resource.h" + +extern HINSTANCE g_hInst; diff --git a/dll/ime/msctfime/msctfime.rc b/dll/ime/msctfime/msctfime.rc new file mode 100644 index 00000000000..1f75b36dd37 --- /dev/null +++ b/dll/ime/msctfime/msctfime.rc @@ -0,0 +1,32 @@ +/* + * PROJECT: ReactOS msctfime.ime + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: Resource of msctfime.ime + * COPYRIGHT: Copyright 2023 Katayama Hirofumi MZ + */ + +#include +#include + +#include "resource.h" + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL + +#define REACTOS_VERSION_DLL +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS msctfime.ime" +#define REACTOS_STR_INTERNAL_NAME "msctfime" +#define REACTOS_STR_ORIGINAL_FILENAME "msctfime.ime" +#include + +#include + +/* Icons */ +IDI_UNICODE ICON "res/unicode.ico" +IDI_DOWN ICON "res/down.ico" + +/* UTF-8 */ +#pragma code_page(65001) + +#ifdef LANGUAGE_EN_US + #include "lang/en-US.rc" +#endif diff --git a/dll/ime/msctfime/msctfime.spec b/dll/ime/msctfime/msctfime.spec new file mode 100644 index 00000000000..2e9b8708e09 --- /dev/null +++ b/dll/ime/msctfime/msctfime.spec @@ -0,0 +1,30 @@ +@ stdcall CtfImeDispatchDefImeMessage(ptr long ptr ptr) +@ stdcall CtfImeCreateInputContext(ptr) +@ stdcall CtfImeCreateThreadMgr() +@ stdcall CtfImeDestroyInputContext(ptr) +@ stdcall CtfImeDestroyThreadMgr() +@ stdcall CtfImeEscapeEx(ptr long ptr ptr) +@ stdcall CtfImeGetGuidAtom(ptr long ptr) +@ stdcall CtfImeInquireExW(ptr ptr long ptr) +@ stdcall CtfImeIsGuidMapEnable(ptr) +@ stdcall CtfImeIsIME(ptr) +@ stdcall CtfImeProcessCicHotkey(ptr long ptr) +@ stdcall CtfImeSelectEx(ptr long ptr) +@ stdcall CtfImeSetActiveContextAlways(ptr long ptr ptr) +@ stdcall CtfImeThreadDetach() +@ stdcall ImeConfigure(ptr ptr long ptr) +@ stdcall ImeConversionList(ptr wstr ptr long long) +@ stdcall ImeDestroy(long) +@ stdcall ImeEnumRegisterWord(ptr wstr long wstr ptr) +@ stdcall ImeEscape(ptr long ptr) +@ stdcall ImeGetRegisterWordStyle(long ptr) +@ stdcall ImeInquire(ptr ptr long) +@ stdcall ImeProcessKey(ptr long long ptr) +@ stdcall ImeRegisterWord(wstr long wstr) +@ stdcall ImeSelect(ptr long) +@ stdcall ImeSetActiveContext(ptr long) +@ stdcall ImeSetCompositionString(ptr long ptr long ptr long) +@ stdcall ImeToAsciiEx(long long ptr ptr long ptr) +@ stdcall ImeUnregisterWord(wstr long wstr) +@ stdcall NotifyIME(ptr long long long) +@ stdcall UIWndProc(ptr long ptr ptr) diff --git a/dll/ime/msctfime/res/down.ico b/dll/ime/msctfime/res/down.ico new file mode 100644 index 0000000000000000000000000000000000000000..5aa5db9b7584ae6493bc62ca8ea1a580ecaf2eca GIT binary patch literal 3438 zcmb`KeN2^A9LK--!i!28zCfj1LNu~l8fu84K#8I2FH#E?*<4dB=w+>>rgBZMsdJO? zr58lZ9Qo2*H6W)}ca$}2(8RwaLo~%rQ}0@9Y^JBrxtDvpAQEmJp5J}WInU>Jp68x> z&iDHug{iNG3=!u@750}NlRDaQD(oxmq|bjnL52OK@F*$SGDHGl^K8is^PT)3A$4Pn z2E3C`EL5aBPXjmRE5fxssRT9Iq=6j%O=M(%z~FJJN~YV9J8JiJmV zzie0bg=$Saw?kvkY?Y&Vvl35kWZdTzv*88JI{Ar4SHHH#+zb0PxY_u@u1Rw+odrrTX^2x%4prG*ze!g2<|hgX@la9uT|pdcbPMn?~u!7 zYXpB(JRT2c+hcr(m`iE|e^kQ5!xa+~BZtEwr_-slv@~UBXDc^1R|N$HDk>^cNlA&^ zZnw(I%T-lXr2_{J=+L1KmoKZmyAqKv2^G<_U=2K*fO zW$>%ux4`d*uY<3LZ-j4#Z-XBO9}mw8uSkJUho1>Q7rq$Y4POag3*XSw^uQ;<=fD@i zm%-QcG(9SYcf(i0*TOfz_b@%GgRh5ggl~p#gYRK_ST9LL4pBsu5%9O49+^7$diX~8 zX81Pv+fR>7F}xeT622C`p@wzhFX5?yn*W?Sqf|nondsnaQBjrlzK*PN$v0x#K3OkJC=K4XbTZ>J-{(Q>l%gz(@F_DNg6a zNt3CLeSqKn!Ep~coew_}PW#^bMvjViB;21kI%y0|MDOmHp~Hrch>g3)*OVe6qXrBd z6n$4mlT)9*{rcNnTMSFjIHa3{rN1MjcJ$PXHnwujL)g9*#1tZq5S$C%L!P&^tIoy& zptFq8+k(zond)@`MxuI|;)jv5-lPO!`2S1^!ssKC%z;SW?k+(XQT4C}G4@5o4BksZeARju-bYciW9%Bf_tbcSaT*XX+Jf>nj zB~b7pYej*=&x$KyN`4+^!kDZt1q%L#y;*nj6)X;i!{Gcp4u`>64-ORk6Z^zHF;Bb` z>%=)RPJ9#F#5JvHb}m>m&WthR%h)omj49*ESh98G?h1~N;p6w%J#LTLlnO!%D!VI zvp=q}TMhd*7=b){W=s3}+0@2z_Fj{=t;4~5`OC?_TnZz2@28sBSvDbv=qZ3OIiZ4)# z6G+8Tw8D#6+(0c1a$(R5gJ2jG<2sVj9O){U7@AK#4B^;>ax^0yf1n*V5D$ZT805pC z9|i$2D9AOtwz}lnrv1;NKT1-Hlz7pS8;FTPO$>5k(39&3N-Mc@y2)kTEFLg)(~E literal 0 HcmV?d00001 diff --git a/dll/ime/msctfime/res/unicode.ico b/dll/ime/msctfime/res/unicode.ico new file mode 100644 index 0000000000000000000000000000000000000000..59a1ac7b59abf37faa4570b7acf142d44cd20b8c GIT binary patch literal 326 zcmZQzU<5)11tu_Uz{tQL#=yX!0mKSG>;S|dc@Ss-lbFQ+|Nk)r<>c(_?CtIC3X3;y zNJ!iW!+U^i5C-!>av(Jzwa5mrA8eN3f7mP`Q`jsaVb~7D{Xje)h<5|=X9fww$3Xh9 K1hSriW&;4&K_wdi literal 0 HcmV?d00001 diff --git a/dll/ime/msctfime/resource.h b/dll/ime/msctfime/resource.h new file mode 100644 index 00000000000..dd8cc32caf0 --- /dev/null +++ b/dll/ime/msctfime/resource.h @@ -0,0 +1,16 @@ +#pragma once + +#define IDI_UNICODE 256 +#define IDI_DOWN 257 + +#define IDS_OK 100 +#define IDS_CANCEL 101 +#define IDS_ABORT 102 +#define IDS_RETRY 103 +#define IDS_IGNORE 104 +#define IDS_YES 105 +#define IDS_NO 106 + +#define IDS_ENTER 512 +#define IDS_FINALIZE_STRING 513 +#define IDS_CONVERSION 514 diff --git a/dll/win32/imm32/ime.c b/dll/win32/imm32/ime.c index a30b86af31b..f198f7112c1 100644 --- a/dll/win32/imm32/ime.c +++ b/dll/win32/imm32/ime.c @@ -904,7 +904,7 @@ HWND WINAPI ImmGetDefaultIMEWnd(HWND hWnd) /*********************************************************************** * ImmNotifyIME (IMM32.@) */ -BOOL WINAPI ImmNotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue) +BOOL WINAPI ImmNotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD_PTR dwValue) { HKL hKL; PIMEDPI pImeDpi; diff --git a/dll/win32/imm32/imm32.spec b/dll/win32/imm32/imm32.spec index 3bd4c297f44..03ba666c074 100644 --- a/dll/win32/imm32/imm32.spec +++ b/dll/win32/imm32/imm32.spec @@ -93,8 +93,8 @@ @ stdcall ImmLockIMC(ptr) @ stdcall ImmLockIMCC(ptr) @ stdcall ImmLockImeDpi(ptr) -@ stdcall ImmNotifyIME(ptr long long long) -@ stdcall ImmProcessKey(ptr long long long long) +@ stdcall ImmNotifyIME(ptr long long ptr) +@ stdcall ImmProcessKey(ptr long long ptr long) @ stdcall ImmPutImeMenuItemsIntoMappedFile(ptr) @ stdcall ImmReSizeIMCC(ptr long) @ stdcall ImmRegisterClient(ptr ptr) diff --git a/sdk/include/ddk/immdev.h b/sdk/include/ddk/immdev.h index e36ff688666..7dd67cdb013 100644 --- a/sdk/include/ddk/immdev.h +++ b/sdk/include/ddk/immdev.h @@ -341,6 +341,115 @@ C_ASSERT(sizeof(CLIENTIMC) == 0x34); #define CLIENTIMC_DISABLEIME 0x80 #define CLIENTIMC_UNKNOWN2 0x100 +/* IME file interface */ + +BOOL WINAPI +ImeInquire( + _Out_ LPIMEINFO lpIMEInfo, + _Out_ LPWSTR lpszWndClass, + _In_ DWORD dwSystemInfoFlags); + +DWORD WINAPI +ImeConversionList( + _In_ HIMC hIMC, + _In_ LPCWSTR lpSrc, + _Out_ LPCANDIDATELIST lpDst, + _In_ DWORD dwBufLen, + _In_ UINT uFlag); + +BOOL WINAPI +ImeRegisterWord( + _In_ LPCWSTR lpszReading, + _In_ DWORD dwStyle, + _In_ LPCWSTR lpszString); + +BOOL WINAPI +ImeUnregisterWord( + _In_ LPCWSTR lpszReading, + _In_ DWORD dwStyle, + _In_ LPCWSTR lpszString); + +UINT WINAPI +ImeGetRegisterWordStyle( + _In_ UINT nItem, + _Out_ LPSTYLEBUFW lpStyleBuf); + +UINT WINAPI +ImeEnumRegisterWord( + _In_ REGISTERWORDENUMPROCW lpfnEnumProc, + _In_opt_ LPCWSTR lpszReading, + _In_ DWORD dwStyle, + _In_opt_ LPCWSTR lpszString, + _In_opt_ LPVOID lpData); + +BOOL WINAPI +ImeConfigure( + _In_ HKL hKL, + _In_ HWND hWnd, + _In_ DWORD dwMode, + _Inout_opt_ LPVOID lpData); + +BOOL WINAPI +ImeDestroy( + _In_ UINT uReserved); + +LRESULT WINAPI +ImeEscape( + _In_ HIMC hIMC, + _In_ UINT uEscape, + _Inout_opt_ LPVOID lpData); + +BOOL WINAPI +ImeProcessKey( + _In_ HIMC hIMC, + _In_ UINT uVirKey, + _In_ LPARAM lParam, + _In_ CONST LPBYTE lpbKeyState); + +BOOL WINAPI +ImeSelect( + _In_ HIMC hIMC, + _In_ BOOL fSelect); + +BOOL WINAPI +ImeSetActiveContext( + _In_ HIMC hIMC, + _In_ BOOL fFlag); + +UINT WINAPI +ImeToAsciiEx( + _In_ UINT uVirKey, + _In_ UINT uScanCode, + _In_ CONST LPBYTE lpbKeyState, + _Out_ LPTRANSMSGLIST lpTransMsgList, + _In_ UINT fuState, + _In_ HIMC hIMC); + +BOOL WINAPI +NotifyIME( + _In_ HIMC hIMC, + _In_ DWORD dwAction, + _In_ DWORD dwIndex, + _In_ DWORD_PTR dwValue); + +BOOL WINAPI +ImeSetCompositionString( + _In_ HIMC hIMC, + _In_ DWORD dwIndex, + _In_opt_ LPCVOID lpComp, + _In_ DWORD dwCompLen, + _In_opt_ LPCVOID lpRead, + _In_ DWORD dwReadLen); + +DWORD WINAPI +ImeGetImeMenuItems( + _In_ HIMC hIMC, + _In_ DWORD dwFlags, + _In_ DWORD dwType, + _Inout_opt_ LPIMEMENUITEMINFOW lpImeParentMenu, + _Inout_opt_ LPIMEMENUITEMINFOW lpImeMenu, + _In_ DWORD dwSize); + #ifdef __cplusplus } // extern "C" #endif diff --git a/sdk/include/psdk/imm.h b/sdk/include/psdk/imm.h index 9ec9e3cfb18..7d63409ad5f 100644 --- a/sdk/include/psdk/imm.h +++ b/sdk/include/psdk/imm.h @@ -270,23 +270,6 @@ BOOL WINAPI ImmDestroySoftKeyboard( _In_ HWND hwndSoftKBD); -BOOL WINAPI ImeInquire(LPIMEINFO, LPWSTR, LPCWSTR lpszOptions); -BOOL WINAPI ImeConfigure (HKL, HWND, DWORD, LPVOID); -DWORD WINAPI ImeConversionList(HIMC, LPCWSTR, LPCANDIDATELIST,DWORD,UINT); -BOOL WINAPI ImeDestroy(UINT); -LRESULT WINAPI ImeEscape(HIMC, UINT, LPVOID); -BOOL WINAPI ImeProcessKey(HIMC, UINT, LPARAM, CONST LPBYTE); -BOOL WINAPI ImeSelect(HIMC, BOOL); -BOOL WINAPI ImeSetActiveContext(HIMC, BOOL); -UINT WINAPI ImeToAsciiEx(UINT, UINT, CONST LPBYTE, LPDWORD, UINT, HIMC); -BOOL WINAPI NotifyIME(HIMC, DWORD, DWORD, DWORD); -BOOL WINAPI ImeRegisterWord(LPCWSTR, DWORD, LPCWSTR); -BOOL WINAPI ImeUnregisterWord(LPCWSTR, DWORD, LPCWSTR); -UINT WINAPI ImeGetRegisterWordStyle(UINT, LPSTYLEBUFW); -UINT WINAPI ImeEnumRegisterWord(REGISTERWORDENUMPROCW, LPCWSTR, DWORD, LPCWSTR, LPVOID); -BOOL WINAPI ImeSetCompositionString(HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD); -DWORD WINAPI ImeGetImeMenuItems(HIMC, DWORD, DWORD, LPIMEMENUITEMINFOW, LPIMEMENUITEMINFOW, DWORD); - /* wParam for WM_IME_CONTROL */ #define IMC_GETCANDIDATEPOS 0x0007 #define IMC_SETCANDIDATEPOS 0x0008 @@ -870,7 +853,7 @@ BOOL WINAPI ImmIsUIMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM); BOOL WINAPI ImmIsUIMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM); #define ImmIsUIMessage WINELIB_NAME_AW(ImmIsUIMessage) -BOOL WINAPI ImmNotifyIME(_In_ HIMC, _In_ DWORD, _In_ DWORD, _In_ DWORD); +BOOL WINAPI ImmNotifyIME(_In_ HIMC, _In_ DWORD, _In_ DWORD, _In_ DWORD_PTR); DWORD WINAPI ImmProcessKey(HWND, HKL, UINT, LPARAM, DWORD); diff --git a/sdk/include/reactos/imetable.h b/sdk/include/reactos/imetable.h index d41c5af653d..88f1f59f485 100644 --- a/sdk/include/reactos/imetable.h +++ b/sdk/include/reactos/imetable.h @@ -8,11 +8,11 @@ DEFINE_IME_ENTRY(UINT, ImeEnumRegisterWord, (LPVOID lpfnEnumProc, LPCVOID lpszRe DEFINE_IME_ENTRY(BOOL, ImeConfigure, (HKL hKL, HWND hWnd, DWORD dwMode, LPVOID lpData), FALSE) DEFINE_IME_ENTRY(BOOL, ImeDestroy, (UINT uReserved), FALSE) DEFINE_IME_ENTRY(LRESULT, ImeEscape, (HIMC hIMC, UINT uEscape, LPVOID lpData), FALSE) -DEFINE_IME_ENTRY(BOOL, ImeProcessKey, (HIMC hIMC, UINT uVirKey, DWORD lParam, CONST LPBYTE lpbKeyState), FALSE) +DEFINE_IME_ENTRY(BOOL, ImeProcessKey, (HIMC hIMC, UINT uVirKey, LPARAM lParam, CONST LPBYTE lpbKeyState), FALSE) DEFINE_IME_ENTRY(BOOL, ImeSelect, (HIMC hIMC, BOOL fSelect), FALSE) DEFINE_IME_ENTRY(BOOL, ImeSetActiveContext, (HIMC hIMC, BOOL fFlag), FALSE) DEFINE_IME_ENTRY(UINT, ImeToAsciiEx, (UINT uVirKey, UINT uScanCode, CONST LPBYTE lpbKeyState, LPTRANSMSGLIST lpTransMsgList, UINT fuState, HIMC hIMC), FALSE) -DEFINE_IME_ENTRY(BOOL, NotifyIME, (HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue), FALSE) +DEFINE_IME_ENTRY(BOOL, NotifyIME, (HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD_PTR dwValue), FALSE) DEFINE_IME_ENTRY(BOOL, ImeSetCompositionString, (HIMC hIMC, DWORD dwIndex, LPCVOID lpComp, DWORD dwCompLen, LPCVOID lpRead, DWORD dwReadLen), FALSE) DEFINE_IME_ENTRY(DWORD, ImeGetImeMenuItems, (HIMC hIMC, DWORD dwFlags, DWORD dwType, LPIMEMENUITEMINFOW lpImeParentMenu, LPIMEMENUITEMINFOW lpImeMenu, DWORD dwSize), TRUE) DEFINE_IME_ENTRY(BOOL, CtfImeInquireExW, (LPIMEINFO lpIMEInfo, LPVOID lpszWndClass, DWORD dwSystemInfoFlags, HKL hKL), TRUE) diff --git a/win32ss/user/user32/include/immtable.h b/win32ss/user/user32/include/immtable.h index b9acde65ab7..ad178c8282d 100644 --- a/win32ss/user/user32/include/immtable.h +++ b/win32ss/user/user32/include/immtable.h @@ -25,7 +25,7 @@ DEFINE_IMM_ENTRY(BOOL, ImmGetCompositionFontA, (HIMC hIMC, LPLOGFONTA plf), 0, N 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(BOOL, ImmNotifyIME, (HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD_PTR 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)