20 HKL hOldKL, LayoutList[32], hFoundKL =
NULL;
21 UINT iLayout, nLayoutCount;
32 for (iLayout = 0; iLayout < nLayoutCount; ++iLayout)
34 if (LayoutList[iLayout] == hOldKL)
45 for (iLayout = 0; iLayout < nLayoutCount; ++iLayout)
47 if (bNowIME ==
ImmIsIME(LayoutList[iLayout]))
52 hFoundKL = LayoutList[iLayout];
58 if (hFoundKL && hKL != hFoundKL)
103 DWORD dwConversion, dwSentence;
134 DWORD dwConversion, dwSentence;
192 DWORD dwConversion, dwSentence;
215 DWORD dwConversion, dwSentence;
233 DWORD dwConversion, dwSentence;
293 WARN(
"0x%X\n", dwHotKeyID);
319 case WM_IME_STARTCOMPOSITION:
case WM_IME_ENDCOMPOSITION:
383 LPRECONVERTSTRING pRS;
384 LPIMECHARPOSITION pICP;
388 static const size_t acbData[7 * 2] =
392 sizeof(RECONVERTSTRING),
sizeof(RECONVERTSTRING),
393 sizeof(IMECHARPOSITION),
sizeof(RECONVERTSTRING),
396 sizeof(RECONVERTSTRING),
sizeof(RECONVERTSTRING),
397 sizeof(IMECHARPOSITION),
sizeof(RECONVERTSTRING),
400 if (dwCommand == 0 || dwCommand > IMR_DOCUMENTFEED)
402 ERR(
"Out of boundary\n");
406 dwSize = acbData[bAnsiAPI * 7 + dwCommand - 1];
416 case IMR_RECONVERTSTRING:
case IMR_DOCUMENTFEED:
418 if (pRS && (pRS->dwVersion != 0 || pRS->dwSize <
sizeof(RECONVERTSTRING)))
420 ERR(
"Invalid pRS\n");
425 case IMR_CONFIRMRECONVERTSTRING:
427 if (!pRS || pRS->dwVersion != 0)
429 ERR(
"Invalid pRS\n");
450 case IMR_COMPOSITIONFONT:
451 if (bAnsiAPI == bAnsiWnd)
463 case IMR_RECONVERTSTRING:
case IMR_CONFIRMRECONVERTSTRING:
case IMR_DOCUMENTFEED:
464 if (bAnsiAPI == bAnsiWnd || !
pData)
480 if (dwCommand == IMR_CONFIRMRECONVERTSTRING)
489 case IMR_QUERYCHARPOSITION:
490 if (bAnsiAPI == bAnsiWnd)
494 dwCharPos = pICP->dwCharPos;
527 WARN(
"0x%X\n", dwCommand);
539 if (bAnsiAPI == bAnsiWnd)
545 case IMR_COMPOSITIONFONT:
552 case IMR_RECONVERTSTRING:
case IMR_DOCUMENTFEED:
556 if (
ret <
sizeof(RECONVERTSTRING))
571 case IMR_QUERYCHARPOSITION:
572 pICP->dwCharPos = dwCharPos;
576 WARN(
"0x%X\n", dwCommand);
581 if (pTempData !=
pData)
654 TRACE(
"(0x%lX, %p, %p, %p)\n", dwHotKey, lpuModifiers, lpuVKey, lphKL);
655 if (lpuModifiers && lpuVKey)
666 TRACE(
"(%p)\n", hwndIme);
684 TRACE(
"(%p, 0x%lX)\n",
hWnd, dwHotKeyID);
727 TRACE(
"(%p)\n", hIMC);
757 TRACE(
"(%p, %p, 0x%X, %p, 0x%lX)\n",
hWnd, hKL, vKey,
lParam, dwHotKeyID);
767 if ((
LOBYTE(vKey) == VK_PACKET) &&
786 if (pImeDpi->ImeProcessKey(hIMC,
vk,
lParam, KeyState))
834 ret &= ~IPHK_PROCESSBYIME;
884 DWORD dwIndex, dwCount, cbTrans;
888 TRACE(
"(%p)\n", hIMC);
913 cbTrans = dwCount *
sizeof(
TRANSMSG);
920#ifdef IMM_WIN3_SUPPORT
930 dwCount = WINNLSTranslateMessage(dwCount, pTrans, hIMC, bAnsi, wLang);
938 for (dwIndex = 0; dwIndex < dwCount; ++dwIndex, ++pItem)
974#ifdef IMM_WIN3_SUPPORT
989 dwCount = WINNLSTranslateMessage(dwCount, pNewTransMsg, hIMC, bAnsi, Lang);
993 pNewTransMsg = lpTransMsg;
1000 pItem = pNewTransMsg;
1001 for (dwIndex = 0; dwIndex < dwCount; ++dwIndex, ++pItem)
1009#ifdef IMM_WIN3_SUPPORT
1010 if (pNewTransMsg != lpTransMsg)
1026#define MSG_COUNT 0x100
1033 BYTE abKeyState[256];
1063 dwCount = pIC->dwNumMsgBuf;
1074 pIC->dwNumMsgBuf = 0;
1108 if ((
BYTE)
vk == VK_PACKET)
1129 kret = pImeDpi->ImeToAsciiEx(
vk,
HIWORD(lKeyData), abKeyState,
pList, 0, hIMC);
1227 uVK = *puVK = (
wParam & 0xFF);
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
LRESULT CtfImmSetLangBand(_In_ HWND hWnd, _In_ BOOL fSet)
DWORD g_aimm_compat_flags
BOOL NTAPI IsBadWritePtr(IN LPVOID lp, IN UINT_PTR ucb)
LCID WINAPI GetSystemDefaultLCID(void)
BOOL WINAPI ImmEnumInputContext(_In_ DWORD dwThreadId, _In_ IMCENUMPROC lpfn, _In_ LPARAM lParam)
struct _tagTRANSMSG TRANSMSG
BOOL WINAPI CtfImmIsCiceroStartedInThread(VOID)
PCLIENTIMC WINAPI ImmLockClientImc(_In_ HIMC hImc)
#define IMS_COMPLETECOMPSTR
struct INPUTCONTEXTDX * LPINPUTCONTEXTDX
#define IMS_UNSETLANGBAND
PIMEDPI WINAPI ImmLockImeDpi(_In_ HKL hKL)
VOID WINAPI ImmUnlockImeDpi(_Inout_opt_ PIMEDPI pImeDpi)
#define IMS_SENDNOTIFICATION
VOID WINAPI ImmUnlockClientImc(_Inout_ PCLIENTIMC pClientImc)
BOOL WINAPI ImmSetConversionStatus(_In_ HIMC hIMC, _In_ DWORD fdwConversion, _In_ DWORD fdwSentence)
#define IME_HOTKEY_PRIVATE_LAST
#define IME_JHOTKEY_CLOSE_OPEN
#define IME_KHOTKEY_HANJACONVERT
#define IME_CMODE_HANJACONVERT
#define IME_THOTKEY_IME_NONIME_TOGGLE
LONG WINAPI ImmGetCompositionStringA(_In_ HIMC hIMC, _In_ DWORD dwIndex, _Out_writes_bytes_opt_(dwBufLen) LPVOID lpBuf, _In_ DWORD dwBufLen)
#define IME_CHOTKEY_SYMBOL_TOGGLE
HIMC WINAPI ImmGetContext(_In_ HWND hWnd)
#define IME_CHOTKEY_IME_NONIME_TOGGLE
#define IMN_SETSENTENCEMODE
#define IME_ESC_PRIVATE_HOTKEY
#define IME_KHOTKEY_SHAPE_TOGGLE
BOOL WINAPI ImmReleaseContext(_In_ HWND hWnd, _In_ HIMC hIMC)
BOOL WINAPI ImmGetOpenStatus(_In_ HIMC hIMC)
#define IME_THOTKEY_SHAPE_TOGGLE
#define IME_HOTKEY_PRIVATE_FIRST
LONG WINAPI ImmGetCompositionStringW(_In_ HIMC hIMC, _In_ DWORD dwIndex, _Out_writes_bytes_opt_(dwBufLen) LPVOID lpBuf, _In_ DWORD dwBufLen)
BOOL WINAPI ImmIsIME(_In_ HKL hKL)
#define IME_KHOTKEY_ENGLISH
#define IMN_SETOPENSTATUS
BOOL WINAPI ImmSetOpenStatus(_In_ HIMC hIMC, _In_ BOOL fOpen)
#define IME_CMODE_FULLSHAPE
#define IME_THOTKEY_SYMBOL_TOGGLE
#define IME_CHOTKEY_SHAPE_TOGGLE
#define IMN_SETCONVERSIONMODE
BOOL WINAPI ImmNotifyIME(_In_ HIMC hIMC, _In_ DWORD dwAction, _In_ DWORD dwIndex, _In_ DWORD_PTR dwValue)
BOOL WINAPI ImmUnlockIMCC(_In_ HIMCC imcc)
#define INPUTCONTEXTDX_CHANGE_OPEN
LPINPUTCONTEXT WINAPI ImmLockIMC(_In_ HIMC hIMC)
#define INPUTCONTEXTDX_CHANGE_SENTENCE
#define NI_COMPOSITIONSTR
#define IME_PROP_ACCEPT_WIDE_VKEY
#define INPUTCONTEXTDX_CHANGE_FORCE_OPEN
#define INPUTCONTEXTDX_CHANGE_CONVERSION
#define IME_PROP_NEED_ALTKEY
BOOL WINAPI ImmUnlockIMC(_In_ HIMC hIMC)
#define IME_PROP_KBD_CHAR_FIRST
#define IME_PROP_IGNORE_UPKEYS
LPVOID WINAPI ImmLockIMCC(_In_ HIMCC imcc)
DWORD NTAPI NtUserNotifyIMEStatus(_In_ HWND hwnd, _In_ BOOL fOpen, _In_ DWORD dwConversion)
@ THREADSTATE_OLDKEYBOARDLAYOUT
BOOL NTAPI NtUserGetImeHotKey(_In_ DWORD dwHotKeyId, _Out_ PUINT lpuModifiers, _Out_ PUINT lpuVirtualKey, _Out_ LPHKL lphKL)
#define GetWin32ClientInfo()
DWORD_PTR NTAPI NtUserGetThreadState(DWORD Routine)
DWORD NTAPI NtUserGetAppImeLevel(_In_ HWND hWnd)
#define WNDS_ANSIWINDOWPROC
#define VK_DBE_ENTERCONFIGMODE
#define VK_DBE_ENTERWORDREGISTERMODE
#define VK_DBE_NOCODEINPUT
LRESULT WINAPI ImmRequestMessageA(_In_ HIMC hIMC, _In_ WPARAM wParam, _In_ LPARAM lParam)
static VOID ImmPostMessages(_In_ HWND hwnd, _In_ HIMC hIMC, _In_ DWORD dwCount, _In_ LPTRANSMSG lpTransMsg)
static BOOL Imm32ProcessHotKey(HWND hWnd, HIMC hIMC, HKL hKL, DWORD dwHotKeyID)
static BOOL Imm32KShapeToggle(HIMC hIMC)
BOOL WINAPI ImmIsUIMessageA(_In_opt_ HWND hWndIME, _In_ UINT msg, _In_ WPARAM wParam, _In_ LPARAM lParam)
DWORD WINAPI ImmProcessKey(_In_ HWND hWnd, _In_ HKL hKL, _In_ UINT vKey, _In_ LPARAM lParam, _In_ DWORD dwHotKeyID)
static BOOL Imm32JCloseOpen(HIMC hIMC, HKL hKL, HWND hWnd)
DWORD WINAPI ImmGetAppCompatFlags(_In_ HIMC hIMC)
BOOL WINAPI ImmTranslateMessage(_In_ HWND hwnd, _In_ UINT msg, _In_ WPARAM wParam, _In_ LPARAM lKeyData)
UINT WINAPI ImmGetVirtualKey(_In_ HWND hWnd)
static BOOL Imm32ImeNonImeToggle(HIMC hIMC, HKL hKL, HWND hWnd, BOOL bNowIME, LANGID LangID)
static BOOL Imm32KHanjaConvert(HIMC hIMC)
DWORD WINAPI ImmCallImeConsoleIME(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam, _Out_ LPUINT puVK)
UINT WINAPI ImmWINNLSGetIMEHotkey(_In_ HWND hwndIme)
BOOL WINAPI ImmSimulateHotKey(_In_ HWND hWnd, _In_ DWORD dwHotKeyID)
BOOL WINAPI ImmGenerateMessage(_In_ HIMC hIMC)
static BOOL Imm32CShapeToggle(HIMC hIMC, HKL hKL, HWND hWnd)
LRESULT WINAPI ImmSystemHandler(_In_ HIMC hIMC, _Inout_opt_ WPARAM wParam, _Inout_opt_ LPARAM lParam)
BOOL Imm32SendNotification(BOOL bProcess)
BOOL WINAPI ImmGetHotKey(_In_ DWORD dwHotKey, _Out_ LPUINT lpuModifiers, _Out_ LPUINT lpuVKey, _Out_ LPHKL lphKL)
static LRESULT Imm32ProcessRequest(HIMC hIMC, PWND pWnd, DWORD dwCommand, LPVOID pData, BOOL bAnsiAPI)
static BOOL Imm32CImeNonImeToggle(HIMC hIMC, HKL hKL, HWND hWnd, LANGID LangID)
static LRESULT ImmRequestMessageAW(_In_ HIMC hIMC, _In_ WPARAM wParam, _In_ LPARAM lParam, _In_ BOOL bAnsi)
static BOOL Imm32CSymbolToggle(HIMC hIMC, HKL hKL, HWND hWnd)
BOOL WINAPI ImmIsUIMessageW(_In_opt_ HWND hWndIME, _In_ UINT msg, _In_ WPARAM wParam, _In_ LPARAM lParam)
LRESULT WINAPI ImmRequestMessageW(_In_ HIMC hIMC, _In_ WPARAM wParam, _In_ LPARAM lParam)
static BOOL CALLBACK Imm32SendNotificationProc(_In_ HIMC hIMC, _In_ LPARAM lParam)
static BOOL Imm32KEnglish(HIMC hIMC)
static BOOL ImmIsUIMessageAW(_In_opt_ HWND hWndIME, _In_ UINT msg, _In_ WPARAM wParam, _In_ LPARAM lParam, _In_ BOOL bAnsi)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
EXTERN_C HRESULT WINAPI CtfImeProcessCicHotkey(_In_ HIMC hIMC, _In_ UINT vKey, _In_ LPARAM lParam)
#define UNREFERENCED_PARAMETER(P)
#define offsetof(TYPE, MEMBER)
#define LANGIDFROMLCID(l)
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
#define RtlCopyMemory(Destination, Source, Length)
#define IPHK_PROCESSBYIME
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR _In_opt_ USHORT LangID
#define IS_ZERO_UNEXPECTEDLY(p)
LONG IchAnsiFromWide(LONG cchWide, LPCWSTR pchWide, UINT uCodePage)
#define LANGID_CHINESE_SIMPLIFIED
LPVOID FASTCALL ValidateHandleNoErr(HANDLE hObject, UINT uType)
#define ValidateHwnd(hwnd)
DWORD Imm32ReconvertWideFromAnsi(LPRECONVERTSTRING pDest, const RECONVERTSTRING *pSrc, UINT uCodePage)
#define ImmLocalFree(lpData)
#define IS_CROSS_THREAD_HIMC(hIMC)
PTHREADINFO FASTCALL Imm32CurrentPti(VOID)
#define ValidateHwndNoErr(hwnd)
LONG IchWideFromAnsi(LONG cchAnsi, LPCSTR pchAnsi, UINT uCodePage)
#define LANGID_CHINESE_TRADITIONAL
VOID LogFontAnsiToWide(const LOGFONTA *plfA, LPLOGFONTW plfW)
#define INVALID_HOTKEY_ID
#define IS_NULL_UNEXPECTEDLY(p)
DWORD Imm32ReconvertAnsiFromWide(LPRECONVERTSTRING pDest, const RECONVERTSTRING *pSrc, UINT uCodePage)
LPVOID ImmLocalAlloc(_In_ DWORD dwFlags, _In_ DWORD dwBytes)
VOID LogFontWideToAnsi(const LOGFONTW *plfW, LPLOGFONTA plfA)
#define ImeDpi_IsUnicode(pImeDpi)
DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
BOOL WINAPI IsWindow(_In_opt_ HWND)
HKL WINAPI GetKeyboardLayout(_In_ DWORD)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
int WINAPI ToUnicode(_In_ UINT wVirtKey, _In_ UINT wScanCode, _In_reads_bytes_opt_(256) CONST BYTE *lpKeyState, _Out_writes_(cchBuff) LPWSTR pwszBuff, _In_ int cchBuff, _In_ UINT wFlags)
_Check_return_ BOOL WINAPI GetKeyboardState(_Out_writes_(256) PBYTE lpKeyState)
#define WM_IME_SETCONTEXT
UINT WINAPI GetKeyboardLayoutList(_In_ int nBuff, _Out_writes_to_opt_(nBuff, return) HKL FAR *lpList)
#define WM_IME_COMPOSITIONFULL
int WINAPI ToAsciiEx(_In_ UINT, _In_ UINT, _In_reads_opt_(256) CONST BYTE *, _Out_ LPWORD, _In_ UINT, _In_opt_ HKL)
BOOL WINAPI PostMessageA(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)