From ec9d277d59a2bb966de7ed7003502aecf0a3db3f Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Sun, 9 Aug 2020 22:41:11 +0900 Subject: [PATCH] [IMM32][NTUSER] Implement ImmGetHotKey (#3025) CORE-11700 - Implement imm32!ImmGetHotKey function. - Modify NtUserGetImeHotKey function. - Add LPHKL typedef into header. --- dll/win32/imm32/CMakeLists.txt | 2 +- dll/win32/imm32/imm.c | 22 ++++++++++++++++++++++ sdk/include/psdk/imm.h | 3 +++ win32ss/include/ntuser.h | 12 +++++------- win32ss/user/ntuser/ime.c | 15 ++++++--------- 5 files changed, 37 insertions(+), 17 deletions(-) diff --git a/dll/win32/imm32/CMakeLists.txt b/dll/win32/imm32/CMakeLists.txt index 01eec2a490c..10c1a6e3708 100644 --- a/dll/win32/imm32/CMakeLists.txt +++ b/dll/win32/imm32/CMakeLists.txt @@ -14,6 +14,6 @@ list(APPEND SOURCE add_library(imm32 MODULE ${SOURCE} version.rc) set_module_type(imm32 win32dll) -target_link_libraries(imm32 wine) +target_link_libraries(imm32 wine win32ksys) add_importlibs(imm32 advapi32 user32 msvcrt kernel32 ntdll) add_cd_file(TARGET imm32 DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/imm32/imm.c b/dll/win32/imm32/imm.c index cfa7d6dea39..5b8468283dc 100644 --- a/dll/win32/imm32/imm.c +++ b/dll/win32/imm32/imm.c @@ -22,6 +22,9 @@ #include #include +#ifdef __REACTOS__ +#define WIN32_NO_STATUS +#endif #include "windef.h" #include "winbase.h" #include "wingdi.h" @@ -33,6 +36,11 @@ #include "winnls.h" #include "winreg.h" #include "wine/list.h" +#ifdef __REACTOS__ +#include +#include +#include "../../../win32ss/include/ntuser.h" +#endif WINE_DEFAULT_DEBUG_CHANNEL(imm); @@ -3160,11 +3168,25 @@ BOOL WINAPI ImmEnumInputContext(DWORD idThread, IMCENUMPROC lpfn, LPARAM lParam) * ImmGetHotKey(IMM32.@) */ +#ifdef __REACTOS__ +BOOL WINAPI +ImmGetHotKey(IN DWORD dwHotKey, + OUT LPUINT lpuModifiers, + OUT LPUINT lpuVKey, + OUT LPHKL lphKL) +{ + TRACE("%lx, %p, %p, %p\n", dwHotKey, lpuModifiers, lpuVKey, lphKL); + if (lpuModifiers && lpuVKey) + return NtUserGetImeHotKey(dwHotKey, lpuModifiers, lpuVKey, lphKL); + return FALSE; +} +#else BOOL WINAPI ImmGetHotKey(DWORD hotkey, UINT *modifiers, UINT *key, HKL hkl) { FIXME("%x, %p, %p, %p: stub\n", hotkey, modifiers, key, hkl); return FALSE; } +#endif /*********************************************************************** * ImmDisableLegacyIME(IMM32.@) diff --git a/sdk/include/psdk/imm.h b/sdk/include/psdk/imm.h index 8b4cbb655ca..e856648c170 100644 --- a/sdk/include/psdk/imm.h +++ b/sdk/include/psdk/imm.h @@ -27,6 +27,9 @@ extern "C" { typedef HANDLE HIMC; typedef HANDLE HIMCC; +#ifdef __REACTOS__ +typedef HKL *LPHKL; +#endif typedef struct tagREGISTERWORDA { LPSTR lpReading; diff --git a/win32ss/include/ntuser.h b/win32ss/include/ntuser.h index 9485f574487..15e0e995922 100644 --- a/win32ss/include/ntuser.h +++ b/win32ss/include/ntuser.h @@ -2278,13 +2278,11 @@ NtUserGetIconSize( LONG *plcx, LONG *plcy); -DWORD -NTAPI -NtUserGetImeHotKey( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3); +BOOL NTAPI +NtUserGetImeHotKey(IN DWORD dwHotKey, + OUT LPUINT lpuModifiers, + OUT LPUINT lpuVKey, + OUT LPHKL lphKL); DWORD NTAPI diff --git a/win32ss/user/ntuser/ime.c b/win32ss/user/ntuser/ime.c index c2da55549d9..c910738e9f6 100644 --- a/win32ss/user/ntuser/ime.c +++ b/win32ss/user/ntuser/ime.c @@ -36,18 +36,15 @@ IntImmProcessKey(PUSER_MESSAGE_QUEUE MessageQueue, PWND pWnd, UINT Msg, WPARAM w return 0; } - -DWORD -APIENTRY -NtUserGetImeHotKey( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3) +BOOL WINAPI +NtUserGetImeHotKey(IN DWORD dwHotKey, + OUT LPUINT lpuModifiers, + OUT LPUINT lpuVKey, + OUT LPHKL lphKL) { STUB - return 0; + return FALSE; } DWORD