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
#define GetWin32ClientInfo()
DWORD_PTR NTAPI NtUserGetThreadState(DWORD Routine)
DWORD NTAPI NtUserGetAppImeLevel(_In_ HWND hWnd)
BOOL NTAPI NtUserGetImeHotKey(_In_ DWORD dwHotKeyId, _Out_ PUINT lpuModifiers, _Out_ PUINT lpuVirtualKey, _Out_opt_ LPHKL lphKL)
#define WNDS_ANSIWINDOWPROC
#define VK_DBE_ENTERCONFIGMODE
#define VK_DBE_ENTERWORDREGISTERMODE
#define VK_DBE_NOCODEINPUT
#define LANGID_CHINESE_SIMPLIFIED
#define LANGID_CHINESE_TRADITIONAL
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)
BOOL WINAPI ImmGetHotKey(_In_ DWORD dwHotKey, _Out_ LPUINT lpuModifiers, _Out_ LPUINT lpuVKey, _Out_opt_ LPHKL lphKL)
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)
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)
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#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)
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)
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)
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)