13 #define INVALID_THREAD_ID ((ULONG)-1) 14 #define INVALID_HOTKEY ((UINT)-1) 15 #define MOD_KEYS (MOD_CONTROL | MOD_SHIFT | MOD_ALT | MOD_WIN) 16 #define MOD_LEFT_RIGHT (MOD_LEFT | MOD_RIGHT) 18 #define LANGID_CHINESE_SIMPLIFIED MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED) 19 #define LANGID_JAPANESE MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT) 20 #define LANGID_KOREAN MAKELANGID(LANG_KOREAN, SUBLANG_KOREAN) 21 #define LANGID_CHINESE_TRADITIONAL MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL) 22 #define LANGID_NEUTRAL MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL) 26 #define VK_DBE_ALPHANUMERIC 0xF0 27 #define VK_DBE_KATAKANA 0xF1 28 #define VK_DBE_HIRAGANA 0xF2 29 #define VK_DBE_SBCSCHAR 0xF3 30 #define VK_DBE_DBCSCHAR 0xF4 31 #define VK_DBE_ROMAN 0xF5 32 #define VK_DBE_NOROMAN 0xF6 33 #define VK_DBE_ENTERWORDREGISTERMODE 0xF7 34 #define VK_DBE_ENTERCONFIGMODE 0xF8 35 #define VK_DBE_FLUSHSTRING 0xF9 36 #define VK_DBE_CODEINPUT 0xFA 37 #define VK_DBE_NOCODEINPUT 0xFB 38 #define VK_DBE_DETERINESTRING 0xFC 39 #define VK_DBE_ENTERDLGCONVERSIONMODE 0xFD 115 #define IME_CHOTKEY 0x10 116 #define IME_JHOTKEY 0x30 117 #define IME_KHOTKEY 0x50 118 #define IME_THOTKEY 0x70 119 #define IME_XHOTKEY 0x90 120 static const LANGID s_array[] =
149 for (pNode = *ppList; pNode; pNode = pNode->
pNext)
153 pNode->
pNext = pHotKey;
163 for (pNode =
pList; pNode; pNode = pNode->
pNext)
180 for (pNode =
pList; pNode; pNode = pNode->
pNext)
186 if (
LangID != TargetLangId)
208 if (*ppList == pHotKey)
210 *ppList = pHotKey->
pNext;
215 for (pNode = *ppList; pNode; pNode = pNode->
pNext)
217 if (pNode->
pNext == pHotKey)
235 UINT nScore, nMaxScore = 0;
237 for (pNode =
pList; pNode; pNode = pNode->
pNext)
278 if (nMaxScore < nScore)
295 static UINT s_uKeyUpVKey = 0;
525 if (pOldKL && pOldKL->
hkl != hOldKL)
546 DWORD dwRealCount = 0;
552 if (dwRealCount < dwCount)
564 if (dwRealCount < dwCount)
603 pKL = pWnd->
head.pti->KeyboardLayout;
648 if ((
lParam & 0x80000000) &&
707 ERR(
"!IS_IMM_MODE()\n");
739 if (dwCount < dwRealCount)
755 BOOL bAlphaNumeric, bKatakana, bHiragana, bFullShape, bRoman, bCharCode;
819 ERR(
"!IS_IMM_MODE()\n");
827 pti = pwnd->
head.pti;
869 ERR(
"!IS_IMM_MODE()\n");
878 ppi = ptiCurrent->
ppi;
905 if (!pti || pti->
ppi != ptiCurrent->
ppi)
941 ERR(
"!IS_IMM_MODE()\n");
947 if (pWnd->
head.pti->ppi == pti->
ppi)
970 if (pInfoEx->
hkl == pkl->
hkl)
975 *pInfoEx = *pkl->
piiex;
980 }
while (pkl != pklHead);
990 *pInfoEx = *pkl->
piiex;
995 }
while (pkl != pklHead);
1018 ERR(
"!IS_IMM_MODE()\n");
1025 ImeInfoEx = *pImeInfoEx;
1039 *pImeInfoEx = ImeInfoEx;
1064 ERR(
"!IS_IMM_MODE()\n");
1074 if (pWnd->
head.pti->ppi == pti->
ppi)
1091 if (pkl->
hkl != pImeInfoEx->
hkl)
1101 *pkl->
piiex = *pImeInfoEx;
1104 }
while (pkl != pklHead);
1120 ERR(
"!IS_IMM_MODE()\n");
1127 ImeInfoEx = *pImeInfoEx;
1146 PWND pwndNode, pwndNextOwner, pwndParent, pwndSibling;
1153 for (pwndNode = pwndOwner; ; pwndNode = pwndNextOwner)
1156 if (!pwndNextOwner || pwndNextOwner->
head.pti != pti)
1164 pwndNode = pwndOwner;
1168 if (!pwndParent || pwndOwner != pwndNode)
1174 for (pwndSibling = pwndParent->
spwndChild; pwndSibling; pwndSibling = pwndSibling->
spwndNext)
1176 if (pwndNode->
head.pti != pwndSibling->
head.pti)
1185 if (pwndNode == pwndSibling || (pwndSibling->
style &
WS_CHILD))
1191 pwndNode = pwndSibling;
1203 PWND pwndNode, pwndOwner, pwndLastTopMost =
NULL;
1219 for (pwndOwner = pwndNode; pwndOwner; pwndOwner = pwndOwner->
spwndOwner)
1221 if (pImeWnd == pwndOwner)
1230 pwndLastTopMost = pwndNode;
1233 return pwndLastTopMost;
1240 PWND pwndParent, pwndChild, pwndNode, pwndNext, pwndInsertAfter =
NULL;
1241 PWND pwndInsertAfterSave;
1253 if (pwndInsertBefore)
1255 for (pwndNode = pwndInsertAfter; pwndNode; pwndNode = pwndNode->
spwndNext)
1257 if (pwndNode->
spwndNext == pwndInsertBefore)
1260 if (pwndNode == pImeWnd)
1267 pwndInsertAfter = pwndNode;
1273 for (pwndNode = pwndInsertAfter; pwndNode; pwndNode = pwndNode->
spwndNext)
1279 pwndInsertAfter = pwndNode;
1284 pwndInsertAfterSave = pwndInsertAfter;
1292 pwndChild->
head.pti == pImeWnd->
head.pti)
1295 for (pwndNode = pwndChild; pwndNode; pwndNode = pwndNode->
spwndOwner)
1297 if (pwndNode != pImeWnd)
1308 if (!pwndInsertAfter)
1314 pwndInsertAfter = pwndChild;
1320 pwndChild = pwndNext;
1321 if (pwndChild && pwndChild == pwndInsertAfterSave && pwndInsertAfter)
1337 pwndInsertBefore = pwndOwner;
1347 PWND pImeWnd, pwndFocus, pwndTopLevel, pwndNode, pwndActive;
1354 ERR(
"!IS_IMM_MODE()\n");
1370 for (pwndNode = pwndTopLevel; pwndNode; pwndNode = pwndNode->
spwndOwner)
1374 pwndTopLevel =
NULL;
1384 ptiIme = pImeWnd->
head.pti;
1387 if (!pwndActive || pwndActive != pImeWnd->
spwndOwner)
1429 ObjHead->
pSelf = ObjHead;
1434 pti->
ppi->UserHandleCount++;
1450 pti = pIMC->
head.pti;
1462 pti->
ppi->UserHandleCount--;
1499 pwndChild = pti->
rpdesk->pDeskInfo->spwnd->spwndChild;
1506 if (pWnd && pWnd->
hImc == hIMC)
1548 ERR(
"IME is disabled\n");
1568 if (dwClientImcData)
1597 ERR(
"!IS_IMM_MODE()\n");
1602 if (!dwClientImcData)
1634 if (pIMC && pti != pIMC->
head.pti)
1656 if (pwndTarget->
hImc == hIMC || (bIgnoreNullImc && !pwndTarget->
hImc))
1660 if (pwndTarget == pwndFocus)
1668 if (!bIgnoreNullImc || pWnd->
hImc)
1671 if (pWnd->
hImc != hIMC)
1674 if (pWnd == pwndFocus)
1694 ERR(
"!IS_IMM_MODE()\n");
1716 if (pti->
ppi != ptiIMC->
ppi)
1756 ERR(
"!IS_IMM_MODE()\n");
1783 ERR(
"!IS_IMM_MODE()\n");
1791 ptiIMC = pIMC->
head.pti;
1825 PWND pwnd, pwndOwner, pwndNode;
1831 if (pwnd == pwndTarget || pwnd->
head.pti != ptiTarget ||
IS_WND_MENU(pwnd))
1838 for (pwndOwner = pwnd; pwndOwner; pwndOwner = pwndOwner->
spwndOwner)
1858 if (pwndNode->
head.pti != ptiTarget)
1876 for (; pwndNode; pwndNode = pwndNode->
spwndOwner)
1878 if (pwndNode->
head.pti != ptiTarget)
1925 for (pwndNode = pwndParent; pwndNode; pwndNode = pwndNode->
spwndParent)
1981 pimeui = ((
PIMEWND)pImeWnd)->pimeui;
2008 pimeui = ((
PIMEWND)pImeWnd)->pimeui;
2016 SafeImeUI = *pimeui;
2033 for (pwndNode = pwndTarget; pwndNode; pwndNode = pwndNode->
spwndParent)
2035 if (pwndNode == pwndNode->
head.
rpdesk->pDeskInfo->spwnd)
2053 pimeui = ((
PIMEWND)pImeWnd)->pimeui;
2061 SafeImeUI = *pimeui;
2076 if (pwndNode == pwndTarget)
2085 for (pwndNode = pwndTarget; pwndNode; pwndNode = pwndNode->
spwndOwner)
2095 if (pwndNode == pImeWnd)
2098 if (pwndNode == pImeWnd)
2116 PWND pwndNode, pwndIMC;
2134 if (!pwndNode || pwndIme == pwndNode)
2143 pimeui = ((
PIMEWND)pwndNode)->pimeui;
2144 if (!pimeui || pimeui == (
PIMEUI)-1)
2147 if (pti && pti != pwndNode->
head.pti)
2152 if (pwndNode->
head.pti->ppi != ptiCurrent->
ppi)
2162 SafeImeUI = *pimeui;
2226 SafeImeUI = *pimeui;
2318 ptiIME = pImeWnd->
head.pti;
2328 pimeui = ((
PIMEWND)pImeWnd)->pimeui;
2329 SafeImeUI = *pimeui;
#define IME_CMODE_CHARCODE
VOID FASTCALL IntNotifyImeShowStatus(PWND pImeWnd)
VOID NTAPI RtlInitLargeUnicodeString(IN OUT PLARGE_UNICODE_STRING, IN PCWSTR, IN INT)
#define ERROR_INVALID_PARAMETER
PUSER_MESSAGE_QUEUE gpqForeground
UINT FASTCALL IntImmProcessKey(PUSER_MESSAGE_QUEUE MessageQueue, PWND pWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
#define IME_CHOTKEY_IME_NONIME_TOGGLE
#define IS_WND_CHILD(pWnd)
VOID FASTCALL UserEnterShared(VOID)
DWORD FASTCALL IntAssociateInputContextEx(PWND pWnd, PIMC pIMC, DWORD dwFlags)
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
#define IS_WND_MENU(pWnd)
BOOL FASTCALL UserPostMessage(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)
#define MAKELCID(lgid, srtid)
#define INVALID_THREAD_ID
BOOL FASTCALL UserDeleteObject(HANDLE h, HANDLE_TYPE type)
static BOOL APIENTRY IntSetImeHotKey(DWORD dwHotKeyId, UINT uModifiers, UINT uVirtualKey, HKL hKL, DWORD dwAction)
#define IMN_CLOSESTATUSWINDOW
static PIMEHOTKEY APIENTRY IntGetImeHotKeyByKeyAndLang(PIMEHOTKEY pList, UINT uModKeys, UINT uLeftRight, UINT uVirtualKey, LANGID TargetLangId)
VOID FASTCALL IntUnlinkWindow(PWND Wnd)
struct tagIMC * spDefaultImc
#define IMN_OPENSTATUSWINDOW
PVOID UserGetObjectNoErr(PUSER_HANDLE_TABLE ht, HANDLE handle, HANDLE_TYPE type)
PVOID FASTCALL UserAssignmentLock(PVOID *ppvObj, PVOID pvNew)
DWORD APIENTRY co_IntImmProcessKey(HWND hWnd, HKL hKL, UINT vKey, LPARAM lParam, DWORD dwHotKeyID)
BOOL FASTCALL UserSetImeInfoEx(LPVOID pUnknown, PIMEINFOEX pImeInfoEx)
NTSTATUS NTAPI NtUserBuildHimcList(DWORD dwThreadId, DWORD dwCount, HIMC *phList, LPDWORD pdwCount)
struct tagIMEHOTKEY IMEHOTKEY
ULONG_PTR dwClientImcData
#define ASSERT_REFS_CO(_obj_)
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
#define VK_DBE_ENTERWORDREGISTERMODE
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
PWND FASTCALL IntGetLastTopMostWindowNoIME(PWND pImeWnd)
static __inline VOID UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
IN PVOID IN PVOID IN USHORT IN USHORT Size
PWINDOWLIST FASTCALL IntBuildHwndList(PWND pwnd, DWORD dwFlags, PTHREADINFO pti)
NTSYSAPI NTSTATUS NTAPI ZwQueryDefaultLocale(_In_ BOOLEAN UserProfile, _Out_ PLCID DefaultLocaleId)
BOOL FASTCALL UserDereferenceObject(PVOID Object)
#define LANGID_CHINESE_TRADITIONAL
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
#define IME_PROP_NEED_ALTKEY
PVOID FASTCALL UserCreateObject(PUSER_HANDLE_TABLE ht, PDESKTOP pDesktop, PTHREADINFO pti, HANDLE *h, HANDLE_TYPE type, ULONG size)
PWND FASTCALL co_IntCreateDefaultImeWindow(PWND pwndTarget, HINSTANCE hInst)
#define STATUS_BUFFER_TOO_SMALL
struct _THREADINFO * GetW32ThreadInfo(VOID)
PTHREADINFO FASTCALL IntTID2PTI(HANDLE id)
PTHREADINFO gptiForeground
DWORD NTAPI NtUserCheckImeHotKey(UINT uVirtualKey, LPARAM lParam)
BOOL NTAPI NtUserDisableThreadIme(DWORD dwThreadID)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
static __inline PVOID DesktopHeapAlloc(IN PDESKTOP Desktop, IN SIZE_T Bytes)
VOID FASTCALL IntLinkHwnd(PWND Wnd, HWND hWndPrev)
#define ERROR_ACCESS_DENIED
BOOLEAN co_UserDestroyWindow(PVOID Object)
static __inline VOID UserDerefObjectCo(PVOID obj)
struct tagIMEHOTKEY * pNext
#define IME_HOTKEY_DSWITCH_LAST
BOOL FASTCALL IntWantImeWindow(PWND pwndTarget)
VOID FASTCALL IntFreeHwndList(PWINDOWLIST pwlTarget)
struct _WINSTATION_OBJECT * rpwinstaParent
HWND ahwnd[ANYSIZE_ARRAY]
BOOL FASTCALL IntBroadcastImeShowStatusChange(PWND pImeWnd, BOOL bShow)
#define IME_PROP_IGNORE_UPKEYS
struct _WND * spwndDefaultIme
#define LANGID_CHINESE_SIMPLIFIED
DWORD NTAPI NtUserAssociateInputContext(HWND hWnd, HIMC hIMC, DWORD dwFlags)
BOOL FASTCALL IntImeCanDestroyDefIME(PWND pImeWnd, PWND pwndTarget)
VOID FASTCALL IntImeCheckTopmost(PWND pImeWnd)
VOID UserFreeInputContext(PVOID Object)
BOOL NTAPI NtUserUpdateInputContext(HIMC hIMC, DWORD dwType, DWORD_PTR dwValue)
BOOL FASTCALL IntImeCanDestroyDefIMEforChild(PWND pImeWnd, PWND pwndTarget)
#define IntReferenceThreadInfo(pti)
BOOLEAN UserDestroyInputContext(PVOID Object)
VOID FASTCALL UserEnterExclusive(VOID)
#define UserHMGetHandle(obj)
#define MOD_IGNORE_ALL_MODIFIER
BOOL NTAPI NtUserSetAppImeLevel(HWND hWnd, DWORD dwLevel)
#define IME_CMODE_ALPHANUMERIC
HKL FASTCALL UserGetKeyboardLayout(DWORD dwThreadId)
DBG_DEFAULT_CHANNEL(UserMisc)
#define IME_CMODE_FULLSHAPE
static VOID FASTCALL IntDeleteImeHotKey(PIMEHOTKEY *ppList, PIMEHOTKEY pHotKey)
BOOL NTAPI NtUserGetImeInfoEx(PIMEINFOEX pImeInfoEx, IMEINFOEXCLASS SearchType)
#define IME_THOTKEY_IME_NONIME_TOGGLE
#define EXCEPTION_EXECUTE_HANDLER
#define UlongToHandle(ul)
BOOL FASTCALL UserUpdateInputContext(PIMC pIMC, DWORD dwType, DWORD_PTR dwValue)
HANDLE NTAPI PsGetThreadProcessId(IN PETHREAD Thread)
static VOID FASTCALL IntAddImeHotKey(PIMEHOTKEY *ppList, PIMEHOTKEY pHotKey)
#define IME_CMODE_KATAKANA
#define ValidateHwndNoErr(hwnd)
DWORD FASTCALL UserBuildHimcList(PTHREADINFO pti, DWORD dwCount, HIMC *phList)
#define ISITHOOKED(HookId)
HANDLE FASTCALL UserGetProp(_In_ PWND Window, _In_ ATOM Atom, _In_ BOOLEAN SystemProp)
DWORD NTAPI NtUserGetAppImeLevel(HWND hWnd)
#define STATUS_UNSUCCESSFUL
#define ExAllocatePoolWithTag(hernya, size, tag)
LRESULT APIENTRY co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam)
VOID NTAPI KeDetachProcess(VOID)
PWND FASTCALL UserGetDesktopWindow(VOID)
#define VK_DBE_ENTERCONFIGMODE
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
LRESULT FASTCALL co_IntSendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
_In_ PSCSI_REQUEST_BLOCK _Out_ NTSTATUS _Inout_ BOOLEAN * Retry
#define InterlockedDecrement
DWORD NTAPI NtUserSetThreadLayoutHandles(HKL hNewKL, HKL hOldKL)
DWORD NTAPI NtUserNotifyIMEStatus(HWND hwnd, BOOL fOpen, DWORD dwConversion)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
BYTE afKeyState[256 *2/8]
PVOID AllocInputContextObject(PDESKTOP pDesk, PTHREADINFO pti, SIZE_T Size, PVOID *HandleOwner)
#define LANGIDFROMLCID(l)
HANDLE NTAPI PsGetThreadId(IN PETHREAD Thread)
#define VK_DBE_ALPHANUMERIC
struct tagKL * KeyboardLayout
#define IME_CMODE_HANJACONVERT
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
struct tagIMEHOTKEY * PIMEHOTKEY
struct _USER_MESSAGE_QUEUE * MessageQueue
VOID FASTCALL UserLeave(VOID)
HIMC FASTCALL IntAssociateInputContext(PWND pWnd, PIMC pImc)
#define IACE_IGNORENOCONTEXT
BOOL IntFindNonImeRelatedWndOfSameThread(PWND pwndParent, PWND pwndTarget)
BOOL IntDestroyInputContext(PIMC pIMC)
#define InterlockedIncrement
FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
#define IME_HOTKEY_DSWITCH_FIRST
PVOID UserGetObject(PUSER_HANDLE_TABLE ht, HANDLE handle, HANDLE_TYPE type)
BOOL NTAPI NtUserSetImeHotKey(DWORD dwHotKeyId, UINT uModifiers, UINT uVirtualKey, HKL hKL, DWORD dwAction)
VOID NTAPI KeAttachProcess(IN PKPROCESS Process)
BOOL FASTCALL IntCheckImeShowStatus(PWND pwndIme, PTHREADINFO pti)
VOID FASTCALL IntSendOpenStatusNotify(PTHREADINFO ptiIME, PIMEUI pimeui, PWND pWnd, BOOL bOpen)
VOID FASTCALL IntImeSetFutureOwner(PWND pImeWnd, PWND pwndOwner)
HIMC NTAPI NtUserCreateInputContext(ULONG_PTR dwClientImcData)
#define VK_DBE_NOCODEINPUT
PIMEHOTKEY gpImeHotKeyList
static VOID FASTCALL UserSetImeConversionKeyState(PTHREADINFO pti, DWORD dwConversion)
DWORD_PTR NTAPI NtUserQueryInputContext(HIMC hIMC, DWORD dwType)
#define IS_WND_IMELIKE(pWnd)
struct _WND * spwndParent
static PIMEHOTKEY FASTCALL IntGetImeHotKeyById(PIMEHOTKEY pList, DWORD dwHotKeyId)
#define ERROR_CALL_NOT_IMPLEMENTED
#define RtlZeroMemory(Destination, Length)
BOOL NTAPI NtUserSetImeOwnerWindow(HWND hImeWnd, HWND hwndFocus)
#define _SEH2_EXCEPT(...)
PWND FASTCALL IntGetTopLevelWindow(PWND pwnd)
static __inline BOOL DesktopHeapFree(IN PDESKTOP Desktop, IN PVOID lpMem)
_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
PIMEHOTKEY IntCheckImeHotKey(PUSER_MESSAGE_QUEUE MessageQueue, UINT uVirtualKey, LPARAM lParam)
PUSER_HANDLE_TABLE gHandleTable
BOOL NTAPI NtUserGetImeHotKey(DWORD dwHotKeyId, LPUINT lpuModifiers, LPUINT lpuVirtualKey, LPHKL lphKL)
#define ExFreePoolWithTag(_P, _T)
#define IntDereferenceThreadInfo(pti)
#define WNDS_SERVERSIDEWINDOWPROC
VOID FASTCALL IntImeSetTopMost(PWND pImeWnd, BOOL bTopMost, PWND pwndInsertBefore)
VOID FASTCALL IntFreeImeHotKeys(VOID)
PIMC FASTCALL UserCreateInputContext(ULONG_PTR dwClientImcData)
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
PWND FASTCALL co_UserCreateWindowEx(CREATESTRUCTW *Cs, PUNICODE_STRING ClassName, PLARGE_STRING WindowName, PVOID acbiBuffer, DWORD dwVer)
PIMEHOTKEY IntGetImeHotKeyByKey(PIMEHOTKEY pList, UINT uModKeys, UINT uLeftRight, UINT uVirtualKey)
DWORD FASTCALL IntGetImeCompatFlags(PTHREADINFO pti)
HKL FASTCALL IntGetActiveKeyboardLayout(VOID)
LRESULT FASTCALL IntSendMessageToUI(PTHREADINFO ptiIME, PIMEUI pimeui, UINT uMsg, WPARAM wParam, LPARAM lParam)
BOOL NTAPI NtUserSetImeInfoEx(PIMEINFOEX pImeInfoEx)
BOOL FASTCALL UserGetImeInfoEx(LPVOID pUnknown, PIMEINFOEX pInfoEx, IMEINFOEXCLASS SearchType)
BOOL NTAPI NtUserDestroyInputContext(HIMC hIMC)
static LANGID FASTCALL IntGetImeHotKeyLangId(DWORD dwHotKeyId)
UINT FASTCALL IntGetImeHotKeyLanguageScore(HKL hKL, LANGID HotKeyLangId)
BOOL FASTCALL UserMarkObjectDestroy(PVOID Object)