ReactOS 0.4.16-dev-2613-g9533ad7
imm32_undoc.h File Reference
#include <immdev.h>
#include <winnls32.h>
#include <imetable.h>
Include dependency graph for imm32_undoc.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  tagCOMPSTR_PRIVATE
 
struct  tagIMEINFOEX
 
struct  IMEDPI
 
struct  tagCLIENTIMC
 
struct  INPUTCONTEXTDX
 
struct  IME_SUBSTATE
 
struct  IME_STATE
 

Macros

#define IME_MASK   (0xE0000000UL)
 
#define SUBST_MASK   (0xD0000000UL)
 
#define SPECIAL_MASK   (0xF0000000UL)
 
#define IS_IME_HKL(hKL)   ((((ULONG_PTR)(hKL)) & 0xF0000000) == IME_MASK)
 
#define IS_SPECIAL_HKL(hKL)   ((((ULONG_PTR)(hKL)) & 0xF0000000) == SPECIAL_MASK)
 
#define SPECIALIDFROMHKL(hKL)   ((WORD)(HIWORD(hKL) & 0x0FFF))
 
#define IS_IME_KLID(dwKLID)   ((((ULONG)(dwKLID)) & 0xF0000000) == IME_MASK)
 
#define IS_SUBST_KLID(dwKLID)   ((((ULONG)(dwKLID)) & 0xF0000000) == SUBST_MASK)
 
#define HKL_SWITCH_TO_NON_IME   ((HKL)UlongToHandle(1))
 
#define HKL_RELEASE_IME   ((HKL)UlongToHandle(2))
 
#define WM_IME_SYSTEM   0x00000287
 
#define GCS_PRIVATE   0x8000
 
#define IMS_NOTIFYIMESHOW   0x05
 
#define IMS_UPDATEIMEUI   0x06
 
#define IMS_SETCANDFORM   0x09
 
#define IMS_SETCOMPFONT   0x0A
 
#define IMS_SETCOMPFORM   0x0B
 
#define IMS_CONFIGURE   0x0D
 
#define IMS_SETOPENSTATUS   0x0F
 
#define IMS_FREELAYOUT   0x11
 
#define IMS_SOFTKBDONOFF   0x13
 
#define IMS_GETCONVSTATUS   0x14
 
#define IMS_IMEHELP   0x15
 
#define IMS_IMEACTIVATE   0x17
 
#define IMS_IMEDEACTIVATE   0x18
 
#define IMS_ACTIVATELAYOUT   0x19
 
#define IMS_CONSOLEIME_1A   0x1A /* Undocumented console IME WM_IME_SYSTEM subcommand (0x1A), used internally by conime for Windows compatibility. */
 
#define IMS_CONSOLEIME_1B   0x1B /* Undocumented console IME WM_IME_SYSTEM subcommand (0x1B), used internally by conime for Windows compatibility. */
 
#define IMS_GETIMEMENU   0x1C
 
#define IMS_IMEMENUITEMSELECTED   0x1D
 
#define IMS_GETCONTEXT   0x1E
 
#define IMS_SENDNOTIFICATION   0x1F
 
#define IMS_COMPLETECOMPSTR   0x20
 
#define IMS_LOADTHREADLAYOUT   0x21
 
#define IMS_SETLANGBAND   0x23
 
#define IMS_UNSETLANGBAND   0x24
 
#define DEFINE_IME_ENTRY(type, name, params, extended)   typedef type (WINAPI *FN_##name) params;
 
#define DEFINE_IME_ENTRY(type, name, params, extended)   FN_##name name;
 
#define IMEDPI_FLAG_UNLOADED   0x1
 
#define IMEDPI_FLAG_LOCKED   0x2
 
#define CLIENTIMC_WIDE   0x1
 
#define CLIENTIMC_ACTIVE   0x2
 
#define CLIENTIMC_DESTROY   0x40
 
#define CLIENTIMC_DISABLEIME   0x80
 
#define CLIENTIMC_LOCKED   0x100
 
#define _IME_UI_HIDDEN   0x2
 
#define _IME_UI_VERTICAL   0x4
 
#define _IME_UI_NO_COMPFORM   0x8
 
#define _IME_APP_COMPAT_DIRECT_IME_SYSTEM   0x1
 
#define _IME_APP_COMPAT_DIRECT_IME_FONT   0x80
 
#define _IME_APP_COMPAT_PROCESS_BY_IME   0x10000
 
#define _IME_APP_COMPAT_SPECIAL_IME   0x80000000
 
#define _IME_CMODE_EXTENDED   0x80000000
 
#define _IME_MODE_KOR_SBCSCHAR   0x0002 /* For Korean */
 
#define _IME_MODE_JPN_SBCSCHAR   0x0008 /* For Japanese */
 
#define ImmIMPGetIME   ImmIMPGetIMEA
 
#define ImmIMPQueryIME   ImmIMPQueryIMEA
 
#define ImmIMPSetIME   ImmIMPSetIMEA
 
#define ImmSendIMEMessageEx   ImmSendIMEMessageExA
 

Typedefs

typedef struct tagCOMPSTR_PRIVATE COMPSTR_PRIVATE
 
typedef struct tagCOMPSTR_PRIVATEPCOMPSTR_PRIVATE
 
typedef struct tagCOMPSTR_PRIVATELPCOMPSTR_PRIVATE
 
typedef struct tagIMEINFOEX IMEINFOEX
 
typedef struct tagIMEINFOEXPIMEINFOEX
 
typedef struct tagIMEINFOEXNPIMEINFOEX
 
typedef struct tagIMEINFOEXLPIMEINFOEX
 
typedef enum IMEINFOEXCLASS IMEINFOEXCLASS
 
typedef struct IMEDPI IMEDPI
 
typedef struct IMEDPIPIMEDPI
 
typedef struct IMEDPINPIMEDPI
 
typedef struct IMEDPILPIMEDPI
 
typedef struct tagCLIENTIMC CLIENTIMC
 
typedef struct tagCLIENTIMCPCLIENTIMC
 
typedef struct tagCLIENTIMCNPCLIENTIMC
 
typedef struct tagCLIENTIMCLPCLIENTIMC
 
typedef struct INPUTCONTEXTDX INPUTCONTEXTDX
 
typedef struct INPUTCONTEXTDXPINPUTCONTEXTDX
 
typedef struct INPUTCONTEXTDXNPINPUTCONTEXTDX
 
typedef struct INPUTCONTEXTDXLPINPUTCONTEXTDX
 
typedef struct IME_SUBSTATE IME_SUBSTATE
 
typedef struct IME_SUBSTATEPIME_SUBSTATE
 
typedef struct IME_SUBSTATENPIME_SUBSTATE
 
typedef struct IME_STATE IME_STATE
 
typedef struct IME_STATEPIME_STATE
 
typedef struct IME_STATENPIME_STATE
 
typedef struct IME_STATELPIME_STATE
 

Enumerations

enum  IMEINFOEXCLASS { ImeInfoExKeyboardLayout , ImeInfoExKeyboardLayoutTFS , ImeInfoExImeWindow , ImeInfoExImeFileName }
 

Functions

 C_ASSERT (offsetof(IMEDPI, pNext)==0x0)
 
 C_ASSERT (offsetof(IMEDPI, hInst)==0x4)
 
 C_ASSERT (offsetof(IMEDPI, hKL)==0x8)
 
 C_ASSERT (offsetof(IMEDPI, ImeInfo)==0xc)
 
 C_ASSERT (offsetof(IMEDPI, uCodePage)==0x28)
 
 C_ASSERT (offsetof(IMEDPI, szUIClass)==0x2c)
 
 C_ASSERT (offsetof(IMEDPI, cLockObj)==0x4c)
 
 C_ASSERT (offsetof(IMEDPI, dwFlags)==0x50)
 
 C_ASSERT (offsetof(IMEDPI, ImeInquire)==0x54)
 
 C_ASSERT (offsetof(IMEDPI, ImeConversionList)==0x58)
 
 C_ASSERT (offsetof(IMEDPI, ImeRegisterWord)==0x5c)
 
 C_ASSERT (offsetof(IMEDPI, ImeUnregisterWord)==0x60)
 
 C_ASSERT (offsetof(IMEDPI, ImeGetRegisterWordStyle)==0x64)
 
 C_ASSERT (offsetof(IMEDPI, ImeEnumRegisterWord)==0x68)
 
 C_ASSERT (offsetof(IMEDPI, ImeConfigure)==0x6c)
 
 C_ASSERT (offsetof(IMEDPI, ImeDestroy)==0x70)
 
 C_ASSERT (offsetof(IMEDPI, ImeEscape)==0x74)
 
 C_ASSERT (offsetof(IMEDPI, ImeProcessKey)==0x78)
 
 C_ASSERT (offsetof(IMEDPI, ImeSelect)==0x7c)
 
 C_ASSERT (offsetof(IMEDPI, ImeSetActiveContext)==0x80)
 
 C_ASSERT (offsetof(IMEDPI, ImeToAsciiEx)==0x84)
 
 C_ASSERT (offsetof(IMEDPI, NotifyIME)==0x88)
 
 C_ASSERT (offsetof(IMEDPI, ImeSetCompositionString)==0x8c)
 
 C_ASSERT (offsetof(IMEDPI, ImeGetImeMenuItems)==0x90)
 
 C_ASSERT (offsetof(IMEDPI, CtfImeInquireExW)==0x94)
 
 C_ASSERT (offsetof(IMEDPI, CtfImeSelectEx)==0x98)
 
 C_ASSERT (offsetof(IMEDPI, CtfImeEscapeEx)==0x9c)
 
 C_ASSERT (offsetof(IMEDPI, CtfImeGetGuidAtom)==0xa0)
 
 C_ASSERT (offsetof(IMEDPI, CtfImeIsGuidMapEnable)==0xa4)
 
 C_ASSERT (sizeof(IMEDPI)==0xa8)
 
PIMEDPI WINAPI ImmLockImeDpi (_In_ HKL hKL)
 
VOID WINAPI ImmUnlockImeDpi (_Inout_opt_ PIMEDPI pImeDpi)
 
 C_ASSERT (offsetof(CLIENTIMC, hInputContext)==0x0)
 
 C_ASSERT (offsetof(CLIENTIMC, cLockObj)==0x4)
 
 C_ASSERT (offsetof(CLIENTIMC, dwFlags)==0x8)
 
 C_ASSERT (offsetof(CLIENTIMC, dwCompatFlags)==0xc)
 
 C_ASSERT (offsetof(CLIENTIMC, cs)==0x10)
 
 C_ASSERT (offsetof(CLIENTIMC, uCodePage)==0x28)
 
 C_ASSERT (offsetof(CLIENTIMC, hKL)==0x2c)
 
 C_ASSERT (sizeof(CLIENTIMC)==0x34)
 
PCLIENTIMC WINAPI ImmLockClientImc (_In_ HIMC hImc)
 
VOID WINAPI ImmUnlockClientImc (_Inout_ PCLIENTIMC pClientImc)
 
 C_ASSERT (sizeof(IME_SUBSTATE)==0xc)
 
 C_ASSERT (sizeof(IME_STATE)==0x18)
 
UINT WINAPI GetKeyboardLayoutCP (_In_ LANGID wLangId)
 
BOOL WINAPI ImmGetImeInfoEx (_Out_ PIMEINFOEX pImeInfoEx, _In_ IMEINFOEXCLASS SearchType, _In_ PVOID pvSearchKey)
 
BOOL WINAPI ImmLoadLayout (_In_ HKL hKL, _Inout_ PIMEINFOEX pImeInfoEx)
 
DWORD WINAPI ImmGetAppCompatFlags (_In_ HIMC hIMC)
 
BOOL WINAPI ImmSetActiveContext (_In_ HWND hwnd, _In_opt_ HIMC hIMC, _In_ BOOL fFlag)
 
BOOL WINAPI ImmLoadIME (_In_ HKL hKL)
 
DWORD WINAPI ImmProcessKey (_In_ HWND, _In_ HKL, _In_ UINT, _In_ LPARAM, _In_ DWORD)
 
BOOL WINAPI ImmPutImeMenuItemsIntoMappedFile (_In_ HIMC hIMC)
 
BOOL WINAPI ImmWINNLSGetEnableStatus (_In_opt_ HWND hWnd)
 
BOOL WINAPI ImmSetActiveContextConsoleIME (_In_ HWND hwnd, _In_ BOOL fFlag)
 
BOOL WINAPI ImmActivateLayout (_In_ HKL hKL)
 
BOOL WINAPI ImmFreeLayout (_In_ HKL hKL)
 
BOOL WINAPI ImmGetHotKey (_In_ DWORD dwHotKey, _Out_ LPUINT lpuModifiers, _Out_ LPUINT lpuVKey, _Out_opt_ LPHKL lphKL)
 
BOOL WINAPI ImmSetHotKey (_In_ DWORD dwID, _In_ UINT uModifiers, _In_ UINT uVirtualKey, _In_opt_ _When_((dwAction==SETIMEHOTKEY_ADD) &&!(IME_HOTKEY_DSWITCH_FIRST<=dwHotKeyId &&dwHotKeyId<=IME_HOTKEY_DSWITCH_LAST), _Null_) HKL hKL)
 
BOOL WINAPI ImmWINNLSEnableIME (_In_opt_ HWND hWnd, _In_ BOOL enable)
 
LRESULT WINAPI ImmSystemHandler (_In_ HIMC hIMC, _Inout_opt_ WPARAM wParam, _Inout_opt_ LPARAM lParam)
 
DWORD WINAPI ImmCallImeConsoleIME (_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam, _Out_ LPUINT puVK)
 
BOOL WINAPI ImmIMPGetIMEA (_In_opt_ HWND hWnd, _Out_ LPIMEPROA pImePro)
 
BOOL WINAPI ImmIMPGetIMEW (_In_opt_ HWND hWnd, _Out_ LPIMEPROW pImePro)
 
BOOL WINAPI ImmIMPQueryIMEA (_Inout_ LPIMEPROA pImePro)
 
BOOL WINAPI ImmIMPQueryIMEW (_Inout_ LPIMEPROW pImePro)
 
BOOL WINAPI ImmIMPSetIMEA (_In_opt_ HWND hWnd, _Inout_ LPIMEPROA pImePro)
 
BOOL WINAPI ImmIMPSetIMEW (_In_opt_ HWND hWnd, _Inout_ LPIMEPROW pImePro)
 
LRESULT WINAPI ImmSendIMEMessageExA (_In_ HWND hWnd, _In_ LPARAM lParam)
 
LRESULT WINAPI ImmSendIMEMessageExW (_In_ HWND hWnd, _In_ LPARAM lParam)
 
HRESULT WINAPI CtfAImmActivate (_Out_opt_ HINSTANCE *phinstCtfIme)
 
HRESULT WINAPI CtfAImmDeactivate (_In_ BOOL bDestroy)
 
BOOL WINAPI CtfAImmIsIME (_In_ HKL hKL)
 
BOOL WINAPI CtfImmIsCiceroStartedInThread (VOID)
 
VOID WINAPI CtfImmSetCiceroStartInThread (_In_ BOOL bStarted)
 
VOID WINAPI CtfImmSetAppCompatFlags (_In_ DWORD dwFlags)
 
DWORD WINAPI CtfImmHideToolbarWnd (VOID)
 
VOID WINAPI CtfImmRestoreToolbarWnd (_In_ LPVOID pUnused, _In_ DWORD dwShowFlags)
 
BOOL WINAPI CtfImmGenerateMessage (_In_ HIMC hIMC, _In_ BOOL bSend)
 
VOID WINAPI CtfImmCoUninitialize (VOID)
 
VOID WINAPI CtfImmEnterCoInitCountSkipMode (VOID)
 
BOOL WINAPI CtfImmLeaveCoInitCountSkipMode (VOID)
 
HRESULT WINAPI CtfImmLastEnabledWndDestroy (_In_ BOOL bCreate)
 
HRESULT WINAPI CtfImmTIMActivate (_In_ HKL hKL)
 
BOOL WINAPI CtfImmIsTextFrameServiceDisabled (VOID)
 
BOOL WINAPI CtfImmIsCiceroEnabled (VOID)
 
BOOL WINAPI CtfImmIsGuidMapEnable (_In_ HIMC hIMC)
 
LRESULT WINAPI CtfImmDispatchDefImeMessage (_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
 

Macro Definition Documentation

◆ _IME_APP_COMPAT_DIRECT_IME_FONT

#define _IME_APP_COMPAT_DIRECT_IME_FONT   0x80

Definition at line 220 of file imm32_undoc.h.

◆ _IME_APP_COMPAT_DIRECT_IME_SYSTEM

#define _IME_APP_COMPAT_DIRECT_IME_SYSTEM   0x1

Definition at line 219 of file imm32_undoc.h.

◆ _IME_APP_COMPAT_PROCESS_BY_IME

#define _IME_APP_COMPAT_PROCESS_BY_IME   0x10000

Definition at line 221 of file imm32_undoc.h.

◆ _IME_APP_COMPAT_SPECIAL_IME

#define _IME_APP_COMPAT_SPECIAL_IME   0x80000000

Definition at line 222 of file imm32_undoc.h.

◆ _IME_CMODE_EXTENDED

#define _IME_CMODE_EXTENDED   0x80000000

Definition at line 225 of file imm32_undoc.h.

◆ _IME_MODE_JPN_SBCSCHAR

#define _IME_MODE_JPN_SBCSCHAR   0x0008 /* For Japanese */

Definition at line 229 of file imm32_undoc.h.

◆ _IME_MODE_KOR_SBCSCHAR

#define _IME_MODE_KOR_SBCSCHAR   0x0002 /* For Korean */

Definition at line 228 of file imm32_undoc.h.

◆ _IME_UI_HIDDEN

#define _IME_UI_HIDDEN   0x2

Definition at line 214 of file imm32_undoc.h.

◆ _IME_UI_NO_COMPFORM

#define _IME_UI_NO_COMPFORM   0x8

Definition at line 216 of file imm32_undoc.h.

◆ _IME_UI_VERTICAL

#define _IME_UI_VERTICAL   0x4

Definition at line 215 of file imm32_undoc.h.

◆ CLIENTIMC_ACTIVE

#define CLIENTIMC_ACTIVE   0x2

Definition at line 184 of file imm32_undoc.h.

◆ CLIENTIMC_DESTROY

#define CLIENTIMC_DESTROY   0x40

Definition at line 185 of file imm32_undoc.h.

◆ CLIENTIMC_DISABLEIME

#define CLIENTIMC_DISABLEIME   0x80

Definition at line 186 of file imm32_undoc.h.

◆ CLIENTIMC_LOCKED

#define CLIENTIMC_LOCKED   0x100

Definition at line 187 of file imm32_undoc.h.

◆ CLIENTIMC_WIDE

#define CLIENTIMC_WIDE   0x1

Definition at line 183 of file imm32_undoc.h.

◆ DEFINE_IME_ENTRY [1/2]

#define DEFINE_IME_ENTRY (   type,
  name,
  params,
  extended 
)    typedef type (WINAPI *FN_##name) params;

Definition at line 113 of file imm32_undoc.h.

◆ DEFINE_IME_ENTRY [2/2]

#define DEFINE_IME_ENTRY (   type,
  name,
  params,
  extended 
)    FN_##name name;

Definition at line 113 of file imm32_undoc.h.

◆ GCS_PRIVATE

#define GCS_PRIVATE   0x8000

Definition at line 35 of file imm32_undoc.h.

◆ HKL_RELEASE_IME

#define HKL_RELEASE_IME   ((HKL)UlongToHandle(2))

Definition at line 30 of file imm32_undoc.h.

◆ HKL_SWITCH_TO_NON_IME

#define HKL_SWITCH_TO_NON_IME   ((HKL)UlongToHandle(1))

Definition at line 29 of file imm32_undoc.h.

◆ IME_MASK

#define IME_MASK   (0xE0000000UL)

Definition at line 17 of file imm32_undoc.h.

◆ IMEDPI_FLAG_LOCKED

#define IMEDPI_FLAG_LOCKED   0x2

Definition at line 153 of file imm32_undoc.h.

◆ IMEDPI_FLAG_UNLOADED

#define IMEDPI_FLAG_UNLOADED   0x1

Definition at line 152 of file imm32_undoc.h.

◆ ImmIMPGetIME

#define ImmIMPGetIME   ImmIMPGetIMEA

Definition at line 359 of file imm32_undoc.h.

◆ ImmIMPQueryIME

#define ImmIMPQueryIME   ImmIMPQueryIMEA

Definition at line 360 of file imm32_undoc.h.

◆ ImmIMPSetIME

#define ImmIMPSetIME   ImmIMPSetIMEA

Definition at line 361 of file imm32_undoc.h.

◆ ImmSendIMEMessageEx

#define ImmSendIMEMessageEx   ImmSendIMEMessageExA

Definition at line 362 of file imm32_undoc.h.

◆ IMS_ACTIVATELAYOUT

#define IMS_ACTIVATELAYOUT   0x19

Definition at line 60 of file imm32_undoc.h.

◆ IMS_COMPLETECOMPSTR

#define IMS_COMPLETECOMPSTR   0x20

Definition at line 67 of file imm32_undoc.h.

◆ IMS_CONFIGURE

#define IMS_CONFIGURE   0x0D

Definition at line 52 of file imm32_undoc.h.

◆ IMS_CONSOLEIME_1A

#define IMS_CONSOLEIME_1A   0x1A /* Undocumented console IME WM_IME_SYSTEM subcommand (0x1A), used internally by conime for Windows compatibility. */

Definition at line 61 of file imm32_undoc.h.

◆ IMS_CONSOLEIME_1B

#define IMS_CONSOLEIME_1B   0x1B /* Undocumented console IME WM_IME_SYSTEM subcommand (0x1B), used internally by conime for Windows compatibility. */

Definition at line 62 of file imm32_undoc.h.

◆ IMS_FREELAYOUT

#define IMS_FREELAYOUT   0x11

Definition at line 54 of file imm32_undoc.h.

◆ IMS_GETCONTEXT

#define IMS_GETCONTEXT   0x1E

Definition at line 65 of file imm32_undoc.h.

◆ IMS_GETCONVSTATUS

#define IMS_GETCONVSTATUS   0x14

Definition at line 56 of file imm32_undoc.h.

◆ IMS_GETIMEMENU

#define IMS_GETIMEMENU   0x1C

Definition at line 63 of file imm32_undoc.h.

◆ IMS_IMEACTIVATE

#define IMS_IMEACTIVATE   0x17

Definition at line 58 of file imm32_undoc.h.

◆ IMS_IMEDEACTIVATE

#define IMS_IMEDEACTIVATE   0x18

Definition at line 59 of file imm32_undoc.h.

◆ IMS_IMEHELP

#define IMS_IMEHELP   0x15

Definition at line 57 of file imm32_undoc.h.

◆ IMS_IMEMENUITEMSELECTED

#define IMS_IMEMENUITEMSELECTED   0x1D

Definition at line 64 of file imm32_undoc.h.

◆ IMS_LOADTHREADLAYOUT

#define IMS_LOADTHREADLAYOUT   0x21

Definition at line 68 of file imm32_undoc.h.

◆ IMS_NOTIFYIMESHOW

#define IMS_NOTIFYIMESHOW   0x05

Definition at line 47 of file imm32_undoc.h.

◆ IMS_SENDNOTIFICATION

#define IMS_SENDNOTIFICATION   0x1F

Definition at line 66 of file imm32_undoc.h.

◆ IMS_SETCANDFORM

#define IMS_SETCANDFORM   0x09

Definition at line 49 of file imm32_undoc.h.

◆ IMS_SETCOMPFONT

#define IMS_SETCOMPFONT   0x0A

Definition at line 50 of file imm32_undoc.h.

◆ IMS_SETCOMPFORM

#define IMS_SETCOMPFORM   0x0B

Definition at line 51 of file imm32_undoc.h.

◆ IMS_SETLANGBAND

#define IMS_SETLANGBAND   0x23

Definition at line 69 of file imm32_undoc.h.

◆ IMS_SETOPENSTATUS

#define IMS_SETOPENSTATUS   0x0F

Definition at line 53 of file imm32_undoc.h.

◆ IMS_SOFTKBDONOFF

#define IMS_SOFTKBDONOFF   0x13

Definition at line 55 of file imm32_undoc.h.

◆ IMS_UNSETLANGBAND

#define IMS_UNSETLANGBAND   0x24

Definition at line 70 of file imm32_undoc.h.

◆ IMS_UPDATEIMEUI

#define IMS_UPDATEIMEUI   0x06

Definition at line 48 of file imm32_undoc.h.

◆ IS_IME_HKL

#define IS_IME_HKL (   hKL)    ((((ULONG_PTR)(hKL)) & 0xF0000000) == IME_MASK)

Definition at line 21 of file imm32_undoc.h.

◆ IS_IME_KLID

#define IS_IME_KLID (   dwKLID)    ((((ULONG)(dwKLID)) & 0xF0000000) == IME_MASK)

Definition at line 25 of file imm32_undoc.h.

◆ IS_SPECIAL_HKL

#define IS_SPECIAL_HKL (   hKL)    ((((ULONG_PTR)(hKL)) & 0xF0000000) == SPECIAL_MASK)

Definition at line 22 of file imm32_undoc.h.

◆ IS_SUBST_KLID

#define IS_SUBST_KLID (   dwKLID)    ((((ULONG)(dwKLID)) & 0xF0000000) == SUBST_MASK)

Definition at line 26 of file imm32_undoc.h.

◆ SPECIAL_MASK

#define SPECIAL_MASK   (0xF0000000UL)

Definition at line 19 of file imm32_undoc.h.

◆ SPECIALIDFROMHKL

#define SPECIALIDFROMHKL (   hKL)    ((WORD)(HIWORD(hKL) & 0x0FFF))

Definition at line 23 of file imm32_undoc.h.

◆ SUBST_MASK

#define SUBST_MASK   (0xD0000000UL)

Definition at line 18 of file imm32_undoc.h.

◆ WM_IME_SYSTEM

#define WM_IME_SYSTEM   0x00000287

Definition at line 32 of file imm32_undoc.h.

Typedef Documentation

◆ CLIENTIMC

◆ COMPSTR_PRIVATE

◆ IME_STATE

◆ IME_SUBSTATE

◆ IMEDPI

typedef struct IMEDPI IMEDPI

◆ IMEINFOEX

◆ IMEINFOEXCLASS

◆ INPUTCONTEXTDX

◆ LPCLIENTIMC

◆ LPCOMPSTR_PRIVATE

◆ LPIME_STATE

◆ LPIMEDPI

◆ LPIMEINFOEX

◆ LPINPUTCONTEXTDX

◆ NPCLIENTIMC

◆ NPIME_STATE

◆ NPIME_SUBSTATE

◆ NPIMEDPI

◆ NPIMEINFOEX

◆ NPINPUTCONTEXTDX

◆ PCLIENTIMC

◆ PCOMPSTR_PRIVATE

◆ PIME_STATE

◆ PIME_SUBSTATE

◆ PIMEDPI

typedef struct IMEDPI * PIMEDPI

◆ PIMEINFOEX

◆ PINPUTCONTEXTDX

Enumeration Type Documentation

◆ IMEINFOEXCLASS

Enumerator
ImeInfoExKeyboardLayout 
ImeInfoExKeyboardLayoutTFS 
ImeInfoExImeWindow 
ImeInfoExImeFileName 

Definition at line 91 of file imm32_undoc.h.

92{
IMEINFOEXCLASS
Definition: imm32_undoc.h:92
@ ImeInfoExImeFileName
Definition: imm32_undoc.h:96
@ ImeInfoExKeyboardLayoutTFS
Definition: imm32_undoc.h:94
@ ImeInfoExKeyboardLayout
Definition: imm32_undoc.h:93
@ ImeInfoExImeWindow
Definition: imm32_undoc.h:95

Function Documentation

◆ C_ASSERT() [1/40]

C_ASSERT ( offsetof(CLIENTIMC, cLockObj)  = =0x4)

◆ C_ASSERT() [2/40]

C_ASSERT ( offsetof(CLIENTIMC, cs = =0x10)

◆ C_ASSERT() [3/40]

C_ASSERT ( offsetof(CLIENTIMC, dwCompatFlags)  = =0xc)

◆ C_ASSERT() [4/40]

C_ASSERT ( offsetof(CLIENTIMC, dwFlags = =0x8)

◆ C_ASSERT() [5/40]

C_ASSERT ( offsetof(CLIENTIMC, hInputContext)  = =0x0)

◆ C_ASSERT() [6/40]

C_ASSERT ( offsetof(CLIENTIMC, hKL)  = =0x2c)

◆ C_ASSERT() [7/40]

C_ASSERT ( offsetof(CLIENTIMC, uCodePage)  = =0x28)

◆ C_ASSERT() [8/40]

C_ASSERT ( offsetof(IMEDPI, cLockObj)  = =0x4c)

◆ C_ASSERT() [9/40]

C_ASSERT ( offsetof(IMEDPI, CtfImeEscapeEx = =0x9c)

◆ C_ASSERT() [10/40]

C_ASSERT ( offsetof(IMEDPI, CtfImeGetGuidAtom = =0xa0)

◆ C_ASSERT() [11/40]

C_ASSERT ( offsetof(IMEDPI, CtfImeInquireExW = =0x94)

◆ C_ASSERT() [12/40]

C_ASSERT ( offsetof(IMEDPI, CtfImeIsGuidMapEnable = =0xa4)

◆ C_ASSERT() [13/40]

C_ASSERT ( offsetof(IMEDPI, CtfImeSelectEx = =0x98)

◆ C_ASSERT() [14/40]

C_ASSERT ( offsetof(IMEDPI, dwFlags = =0x50)

◆ C_ASSERT() [15/40]

C_ASSERT ( offsetof(IMEDPI, hInst = =0x4)

◆ C_ASSERT() [16/40]

C_ASSERT ( offsetof(IMEDPI, hKL)  = =0x8)

◆ C_ASSERT() [17/40]

C_ASSERT ( offsetof(IMEDPI, ImeConfigure = =0x6c)

◆ C_ASSERT() [18/40]

C_ASSERT ( offsetof(IMEDPI, ImeConversionList = =0x58)

◆ C_ASSERT() [19/40]

C_ASSERT ( offsetof(IMEDPI, ImeDestroy = =0x70)

◆ C_ASSERT() [20/40]

C_ASSERT ( offsetof(IMEDPI, ImeEnumRegisterWord = =0x68)

◆ C_ASSERT() [21/40]

C_ASSERT ( offsetof(IMEDPI, ImeEscape = =0x74)

◆ C_ASSERT() [22/40]

C_ASSERT ( offsetof(IMEDPI, ImeGetImeMenuItems = =0x90)

◆ C_ASSERT() [23/40]

C_ASSERT ( offsetof(IMEDPI, ImeGetRegisterWordStyle = =0x64)

◆ C_ASSERT() [24/40]

C_ASSERT ( offsetof(IMEDPI, ImeInfo)  = =0xc)

◆ C_ASSERT() [25/40]

C_ASSERT ( offsetof(IMEDPI, ImeInquire = =0x54)

◆ C_ASSERT() [26/40]

C_ASSERT ( offsetof(IMEDPI, ImeProcessKey = =0x78)

◆ C_ASSERT() [27/40]

C_ASSERT ( offsetof(IMEDPI, ImeRegisterWord = =0x5c)

◆ C_ASSERT() [28/40]

C_ASSERT ( offsetof(IMEDPI, ImeSelect = =0x7c)

◆ C_ASSERT() [29/40]

C_ASSERT ( offsetof(IMEDPI, ImeSetActiveContext = =0x80)

◆ C_ASSERT() [30/40]

C_ASSERT ( offsetof(IMEDPI, ImeSetCompositionString = =0x8c)

◆ C_ASSERT() [31/40]

C_ASSERT ( offsetof(IMEDPI, ImeToAsciiEx = =0x84)

◆ C_ASSERT() [32/40]

C_ASSERT ( offsetof(IMEDPI, ImeUnregisterWord = =0x60)

◆ C_ASSERT() [33/40]

C_ASSERT ( offsetof(IMEDPI, NotifyIME = =0x88)

◆ C_ASSERT() [34/40]

C_ASSERT ( offsetof(IMEDPI, pNext)  = =0x0)

◆ C_ASSERT() [35/40]

C_ASSERT ( offsetof(IMEDPI, szUIClass)  = =0x2c)

◆ C_ASSERT() [36/40]

C_ASSERT ( offsetof(IMEDPI, uCodePage)  = =0x28)

◆ C_ASSERT() [37/40]

C_ASSERT ( sizeof(CLIENTIMC = =0x34)

◆ C_ASSERT() [38/40]

C_ASSERT ( sizeof(IME_STATE = =0x18)

◆ C_ASSERT() [39/40]

C_ASSERT ( sizeof(IME_SUBSTATE = =0xc)

◆ C_ASSERT() [40/40]

C_ASSERT ( sizeof(IMEDPI = =0xa8)

◆ CtfAImmActivate()

HRESULT WINAPI CtfAImmActivate ( _Out_opt_ HINSTANCE phinstCtfIme)

Definition at line 1009 of file ctf.c.

1011{
1012 HRESULT hr;
1013 HINSTANCE hinstCtfIme;
1014
1015 TRACE("(%p)\n", phinstCtfIme);
1016
1017 /* Load a CTF IME file if necessary */
1018 hinstCtfIme = Imm32LoadCtfIme();
1019
1020 /* Create a thread manager of the CTF IME */
1022 if (hr == S_OK)
1023 {
1024 /* Update CI_... flags of the thread client info */
1025 GetWin32ClientInfo()->CI_flags |= CI_AIMMACTIVATED; /* Activate AIMM */
1026 GetWin32ClientInfo()->CI_flags &= ~CI_TSFDISABLED; /* Enable TSF */
1027
1028 /* Create the CTF input contexts */
1030 }
1031
1032 if (phinstCtfIme)
1033 *phinstCtfIme = hinstCtfIme;
1034
1035 return hr;
1036}
HRESULT CtfImeCreateThreadMgr(VOID)
Definition: ctf.c:723
HINSTANCE Imm32LoadCtfIme(VOID)
Definition: ctf.c:647
static BOOL CALLBACK Imm32EnumCreateCtfICProc(_In_ HIMC hIMC, _In_ LPARAM lParam)
Definition: ctf.c:863
HRESULT hr
Definition: delayimp.cpp:573
BOOL WINAPI ImmEnumInputContext(_In_ DWORD dwThreadId, _In_ IMCENUMPROC lpfn, _In_ LPARAM lParam)
Definition: imm.c:1124
#define CI_AIMMACTIVATED
Definition: ntuser.h:311
#define GetWin32ClientInfo()
Definition: ntuser.h:352
#define S_OK
Definition: intsafe.h:52
#define TRACE(s)
Definition: solgame.cpp:4

◆ CtfAImmDeactivate()

HRESULT WINAPI CtfAImmDeactivate ( _In_ BOOL  bDestroy)

Definition at line 1044 of file ctf.c.

1046{
1047 HRESULT hr;
1048
1049 if (!bDestroy)
1050 return E_FAIL;
1051
1053 if (hr == S_OK)
1054 {
1055 GetWin32ClientInfo()->CI_flags &= ~CI_AIMMACTIVATED; /* Deactivate AIMM */
1056 GetWin32ClientInfo()->CI_flags |= CI_TSFDISABLED; /* Disable TSF */
1057 }
1058
1059 return hr;
1060}
HRESULT CtfImeDestroyThreadMgr(VOID)
Definition: ctf.c:751
#define E_FAIL
Definition: ddrawi.h:102
#define CI_TSFDISABLED
Definition: ntuser.h:310

◆ CtfAImmIsIME()

BOOL WINAPI CtfAImmIsIME ( _In_ HKL  hKL)

Definition at line 767 of file ctf.c.

768{
769 TRACE("(%p)\n", hKL);
770 if (!Imm32LoadCtfIme())
771 return ImmIsIME(hKL);
772 return CTF_IME_FN(CtfImeIsIME)(hKL);
773}
#define CTF_IME_FN(func_name)
Definition: ctf.c:225
BOOL WINAPI ImmIsIME(_In_ HKL hKL)
Definition: ime.c:430
EXTERN_C BOOL WINAPI CtfImeIsIME(_In_ HKL hKL)
Definition: msctfime.cpp:869

◆ CtfImmCoUninitialize()

VOID WINAPI CtfImmCoUninitialize ( VOID  )

Definition at line 614 of file ctf.c.

615{
617
618 if (!(GetWin32ClientInfo()->CI_flags & CI_CTFCOINIT))
619 return; /* Not CoInitialize'd */
620
621 pData = Imm32GetTLS();
622 if (pData)
623 {
624 pData->bUninitializing = TRUE;
625 Imm32CoUninitialize(); /* Do CoUninitialize */
626 pData->bUninitializing = FALSE;
627
628 GetWin32ClientInfo()->CI_flags &= ~CI_CTFCOINIT;
629 }
630
632 if (!pData || !pData->pSpy)
633 return; /* There were no spy */
634
635 /* Our work is done. We don't need spies like you anymore. */
637 ISPY_Release(pData->pSpy);
638 pData->pSpy = NULL;
639 pData->uliCookie.QuadPart = 0;
640}
VOID Imm32CoUninitialize(VOID)
Definition: ctf.c:138
static IMMTLSDATA * Imm32AllocateTLS(VOID)
Definition: ctf.c:296
static IMMTLSDATA * Imm32GetTLS(VOID)
Definition: ctf.c:321
HRESULT Imm32CoRevokeInitializeSpy(ULARGE_INTEGER cookie)
Definition: ctf.c:154
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define CI_CTFCOINIT
Definition: ntuser.h:307
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830

Referenced by ImmDisableTextFrameService(), and ISPY_PreInitialize().

◆ CtfImmDispatchDefImeMessage()

LRESULT WINAPI CtfImmDispatchDefImeMessage ( _In_ HWND  hWnd,
_In_ UINT  uMsg,
_In_ WPARAM  wParam,
_In_ LPARAM  lParam 
)

Definition at line 1417 of file ctf.c.

1422{
1423 TRACE("(%p, %u, %p, %p)\n", hWnd, uMsg, wParam, lParam);
1424
1426 return 0;
1427
1429}
HWND hWnd
Definition: settings.c:17
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
static BOOL Imm32InsideLoaderLock(VOID)
Definition: ctf.c:16
EXTERN_C LRESULT WINAPI CtfImeDispatchDefImeMessage(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
Definition: msctfime.cpp:832
NTSYSAPI BOOLEAN WINAPI RtlDllShutdownInProgress(void)
Definition: ldrapi.c:1559

Referenced by ImeWndProc_common().

◆ CtfImmEnterCoInitCountSkipMode()

VOID WINAPI CtfImmEnterCoInitCountSkipMode ( VOID  )

Definition at line 381 of file ctf.c.

382{
384
385 TRACE("()\n");
386
387 pData = Imm32GetTLS();
388 if (pData)
389 ++(pData->bDoCount);
390}

◆ CtfImmGenerateMessage()

BOOL WINAPI CtfImmGenerateMessage ( _In_ HIMC  hIMC,
_In_ BOOL  bSend 
)

Definition at line 1273 of file ctf.c.

1276{
1277 DWORD_PTR dwImeThreadId, dwCurrentThreadId;
1278 PCLIENTIMC pClientImc;
1279 BOOL bUnicode;
1280 LPINPUTCONTEXT pIC;
1281 DWORD iMsg, dwNumMsgBuf;
1282 LPTRANSMSG pOldTransMsg, pNewTransMsg;
1283 SIZE_T cbTransMsg;
1284
1285 TRACE("(%p, %d)\n", hIMC, bSend);
1286
1287 dwImeThreadId = NtUserQueryInputContext(hIMC, QIC_INPUTTHREADID);
1288 dwCurrentThreadId = GetCurrentThreadId();
1289 if (dwImeThreadId != dwCurrentThreadId)
1290 {
1291 ERR("%p vs %p\n", dwImeThreadId, dwCurrentThreadId);
1292 return FALSE;
1293 }
1294
1295 pClientImc = ImmLockClientImc(hIMC);
1296 if (IS_NULL_UNEXPECTEDLY(pClientImc))
1297 return FALSE;
1298
1299 bUnicode = !!(pClientImc->dwFlags & CLIENTIMC_WIDE);
1300 ImmUnlockClientImc(pClientImc);
1301
1302 pIC = (LPINPUTCONTEXT)ImmLockIMC(hIMC);
1303 if (IS_NULL_UNEXPECTEDLY(pIC))
1304 return FALSE;
1305
1306 dwNumMsgBuf = pIC->dwNumMsgBuf;
1307 pOldTransMsg = (LPTRANSMSG)ImmLockIMCC(pIC->hMsgBuf);
1308 if (IS_NULL_UNEXPECTEDLY(pOldTransMsg))
1309 {
1310 pIC->dwNumMsgBuf = 0;
1311 ImmUnlockIMC(hIMC);
1312 return TRUE;
1313 }
1314
1315 cbTransMsg = sizeof(TRANSMSG) * dwNumMsgBuf;
1316 pNewTransMsg = (PTRANSMSG)ImmLocalAlloc(0, cbTransMsg);
1317 if (IS_NULL_UNEXPECTEDLY(pNewTransMsg))
1318 {
1319 ImmUnlockIMCC(pIC->hMsgBuf);
1320 pIC->dwNumMsgBuf = 0;
1321 ImmUnlockIMC(hIMC);
1322 return TRUE;
1323 }
1324
1325 RtlCopyMemory(pNewTransMsg, pOldTransMsg, cbTransMsg);
1326
1327 for (iMsg = 0; iMsg < dwNumMsgBuf; ++iMsg)
1328 {
1329 HWND hWnd = pIC->hWnd;
1330 UINT uMsg = pNewTransMsg[iMsg].message;
1331 WPARAM wParam = pNewTransMsg[iMsg].wParam;
1332 LPARAM lParam = pNewTransMsg[iMsg].lParam;
1333 if (bSend)
1334 {
1335 if (bUnicode)
1336 SendMessageW(hWnd, uMsg, wParam, lParam);
1337 else
1338 SendMessageA(hWnd, uMsg, wParam, lParam);
1339 }
1340 else
1341 {
1342 if (bUnicode)
1343 PostMessageW(hWnd, uMsg, wParam, lParam);
1344 else
1345 PostMessageA(hWnd, uMsg, wParam, lParam);
1346 }
1347 }
1348
1349 ImmLocalFree(pNewTransMsg);
1350 ImmUnlockIMCC(pIC->hMsgBuf);
1351 pIC->dwNumMsgBuf = 0; /* Processed */
1352 ImmUnlockIMC(hIMC);
1353
1354 return TRUE;
1355}
#define ERR(fmt,...)
Definition: precomp.h:57
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
struct _tagTRANSMSG * LPTRANSMSG
struct _tagTRANSMSG TRANSMSG
PCLIENTIMC WINAPI ImmLockClientImc(_In_ HIMC hImc)
Definition: imm.c:955
VOID WINAPI ImmUnlockClientImc(_Inout_ PCLIENTIMC pClientImc)
Definition: imm.c:1002
#define CLIENTIMC_WIDE
Definition: imm32_undoc.h:183
BOOL WINAPI ImmUnlockIMCC(_In_ HIMCC imcc)
Definition: utils.c:613
LPINPUTCONTEXT WINAPI ImmLockIMC(_In_ HIMC hIMC)
Definition: imm.c:1080
struct _tagINPUTCONTEXT * LPINPUTCONTEXT
BOOL WINAPI ImmUnlockIMC(_In_ HIMC hIMC)
Definition: imm.c:1090
struct _tagTRANSMSG * PTRANSMSG
LPVOID WINAPI ImmLockIMCC(_In_ HIMCC imcc)
Definition: utils.c:602
DWORD_PTR NTAPI NtUserQueryInputContext(HIMC hIMC, DWORD dwType)
Definition: ime.c:1894
LONG_PTR LPARAM
Definition: minwindef.h:175
UINT_PTR WPARAM
Definition: minwindef.h:174
unsigned int UINT
Definition: ndis.h:50
HIMCC hMsgBuf
Definition: immdev.h:124
DWORD dwNumMsgBuf
Definition: immdev.h:123
LPARAM lParam
Definition: imm32.c:68
WPARAM wParam
Definition: imm32.c:67
UINT message
Definition: imm32.c:66
uint32_t DWORD_PTR
Definition: typedefs.h:65
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
@ QIC_INPUTTHREADID
Definition: undocuser.h:413
#define ImmLocalFree(lpData)
Definition: precomp.h:102
#define IS_NULL_UNEXPECTEDLY(p)
Definition: precomp.h:67
LPVOID ImmLocalAlloc(_In_ DWORD dwFlags, _In_ DWORD dwBytes)
Definition: utils.c:275
DWORD WINAPI GetCurrentThreadId(void)
Definition: thread.c:459
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI PostMessageA(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

◆ CtfImmHideToolbarWnd()

DWORD WINAPI CtfImmHideToolbarWnd ( VOID  )

Definition at line 1363 of file ctf.c.

1364{
1365 ITfLangBarMgr *pBarMgr;
1366 DWORD dwShowFlags = 0;
1367 BOOL bShown;
1368
1369 TRACE("()\n");
1370
1371 if (FAILED(Imm32TF_CreateLangBarMgr(&pBarMgr)))
1372 return dwShowFlags;
1373
1374 if (SUCCEEDED(pBarMgr->lpVtbl->GetShowFloatingStatus(pBarMgr, &dwShowFlags)))
1375 {
1376 bShown = !(dwShowFlags & 0x800);
1377 dwShowFlags &= 0xF;
1378 if (bShown)
1379 pBarMgr->lpVtbl->ShowFloating(pBarMgr, 8);
1380 }
1381
1382 pBarMgr->lpVtbl->Release(pBarMgr);
1383 return dwShowFlags;
1384}
HRESULT Imm32TF_CreateLangBarMgr(_Inout_ ITfLangBarMgr **ppBarMgr)
Definition: ctf.c:179
HRESULT GetShowFloatingStatus([out] DWORD *pdwFlags)
HRESULT ShowFloating([in] DWORD dwFlags)
ULONG Release()
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51

Referenced by ImeWnd_OnImeControl().

◆ CtfImmIsCiceroEnabled()

BOOL WINAPI CtfImmIsCiceroEnabled ( VOID  )

Definition at line 1068 of file ctf.c.

1069{
1070 return IS_CICERO_MODE();
1071}
#define IS_CICERO_MODE()
Definition: ntuser.h:1213

◆ CtfImmIsCiceroStartedInThread()

BOOL WINAPI CtfImmIsCiceroStartedInThread ( VOID  )

Definition at line 781 of file ctf.c.

782{
783 TRACE("()\n");
784 return !!(GetWin32ClientInfo()->CI_flags & CI_CICERO_STARTED);
785}
#define CI_CICERO_STARTED
Definition: ntuser.h:309

Referenced by CtfImeProcessCicHotkey(), and ImmProcessKey().

◆ CtfImmIsGuidMapEnable()

BOOL WINAPI CtfImmIsGuidMapEnable ( _In_ HIMC  hIMC)

Definition at line 1435 of file ctf.c.

1437{
1439 HKL hKL;
1440 PIMEDPI pImeDpi;
1441 BOOL ret = FALSE;
1442
1443 TRACE("(%p)\n", hIMC);
1444
1445 if (!IS_CICERO_MODE() || IS_16BIT_MODE())
1446 return ret;
1447
1450
1451 if (IS_IME_HKL(hKL))
1452 return ret;
1453
1454 pImeDpi = Imm32FindOrLoadImeDpi(hKL);
1455 if (IS_NULL_UNEXPECTEDLY(pImeDpi))
1456 return ret;
1457
1458 ret = pImeDpi->CtfImeIsGuidMapEnable(hIMC);
1459
1460 ImmUnlockImeDpi(pImeDpi);
1461 return ret;
1462}
return ret
Definition: mutex.c:146
DWORD dwThreadId
Definition: fdebug.c:31
PIMEDPI Imm32FindOrLoadImeDpi(HKL hKL)
Definition: ime.c:351
#define IS_IME_HKL(hKL)
Definition: imm32_undoc.h:21
VOID WINAPI ImmUnlockImeDpi(_Inout_opt_ PIMEDPI pImeDpi)
Definition: ime.c:562
#define IS_16BIT_MODE()
Definition: ntuser.h:1214
UINT_PTR HKL
Definition: msctf.idl:125
#define DWORD
Definition: nt_native.h:44
HKL WINAPI GetKeyboardLayout(_In_ DWORD)

Referenced by CS_DoPrivate().

◆ CtfImmIsTextFrameServiceDisabled()

BOOL WINAPI CtfImmIsTextFrameServiceDisabled ( VOID  )

Definition at line 1079 of file ctf.c.

1080{
1081 return !!(GetWin32ClientInfo()->CI_flags & CI_TSFDISABLED);
1082}

Referenced by Imm32SelectInputContext(), and ImmGetImeInfoEx().

◆ CtfImmLastEnabledWndDestroy()

HRESULT WINAPI CtfImmLastEnabledWndDestroy ( _In_ BOOL  bCreate)

Definition at line 996 of file ctf.c.

998{
999 TRACE("(%d)\n", bCreate);
1001}
HRESULT Imm32ActivateOrDeactivateTIM(_In_ BOOL bCreate)
Definition: ctf.c:895
_In_ int _In_ BOOL bCreate
Definition: shlobj.h:1527

◆ CtfImmLeaveCoInitCountSkipMode()

BOOL WINAPI CtfImmLeaveCoInitCountSkipMode ( VOID  )

Definition at line 395 of file ctf.c.

396{
398
399 TRACE("()\n");
400
401 pData = Imm32GetTLS();
402 if (!pData || !pData->bDoCount)
403 return FALSE;
404
405 --(pData->bDoCount);
406 return TRUE;
407}

◆ CtfImmRestoreToolbarWnd()

VOID WINAPI CtfImmRestoreToolbarWnd ( _In_ LPVOID  pUnused,
_In_ DWORD  dwShowFlags 
)

Definition at line 1392 of file ctf.c.

1395{
1396 HRESULT hr;
1397 ITfLangBarMgr *pBarMgr;
1398
1399 UNREFERENCED_PARAMETER(pUnused);
1400
1401 TRACE("(%p, 0x%X)\n", pUnused, dwShowFlags);
1402
1403 hr = Imm32TF_CreateLangBarMgr(&pBarMgr);
1405 return;
1406
1407 if (dwShowFlags)
1408 pBarMgr->lpVtbl->ShowFloating(pBarMgr, dwShowFlags);
1409
1410 pBarMgr->lpVtbl->Release(pBarMgr);
1411}
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:30
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329

Referenced by ImeWnd_OnImeControl().

◆ CtfImmSetAppCompatFlags()

VOID WINAPI CtfImmSetAppCompatFlags ( _In_ DWORD  dwFlags)

Definition at line 805 of file ctf.c.

806{
807 TRACE("(0x%08X)\n", dwFlags);
808 if (!(dwFlags & 0xF0FFFFFF))
810}
DWORD g_aimm_compat_flags
Definition: ctf.c:204
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141

◆ CtfImmSetCiceroStartInThread()

VOID WINAPI CtfImmSetCiceroStartInThread ( _In_ BOOL  bStarted)

Definition at line 790 of file ctf.c.

791{
792 TRACE("(%d)\n", bStarted);
793 if (bStarted)
795 else
796 GetWin32ClientInfo()->CI_flags &= ~CI_CICERO_STARTED;
797}

◆ CtfImmTIMActivate()

HRESULT WINAPI CtfImmTIMActivate ( _In_ HKL  hKL)

Definition at line 1123 of file ctf.c.

1124{
1125 HRESULT hr = S_OK;
1126
1127 TRACE("(%p)\n", hKL);
1128
1130 {
1131 TRACE("g_disable_CUAS_flag\n");
1132 GetWin32ClientInfo()->CI_flags |= CI_TSFDISABLED;
1133 return S_OK;
1134 }
1135
1136 if (GetWin32ClientInfo()->CI_flags & CI_TSFDISABLED)
1137 {
1138 TRACE("CI_TSFDISABLED\n");
1139 return S_OK;
1140 }
1141
1143 {
1144 TRACE("TIM is disabled in registry\n");
1145 GetWin32ClientInfo()->CI_flags |= CI_TSFDISABLED;
1146 return S_OK;
1147 }
1148
1150 {
1151 TRACE("TIM is disabled due to LOGON or MSOBE\n");
1152 return S_OK;
1153 }
1154
1156 {
1157 TRACE("CUAS is disabled in registry\n");
1158 GetWin32ClientInfo()->CI_flags |= CI_TSFDISABLED;
1159 return S_OK;
1160 }
1161
1162 if (NtCurrentTeb()->ProcessEnvironmentBlock->AppCompatFlags.LowPart & 0x100)
1163 {
1164 TRACE("CUAS is disabled by AppCompatFlags\n");
1165 GetWin32ClientInfo()->CI_flags |= CI_TSFDISABLED;
1166 return S_OK;
1167 }
1168
1170 {
1171 TRACE("TIM is disabled by Loader\n");
1172 return S_OK;
1173 }
1174
1175 if (!IS_CICERO_MODE() || IS_16BIT_MODE())
1176 {
1177 TRACE("TIM is disabled because CICERO mode is unset\n");
1178 return S_OK;
1179 }
1180
1181 if (IS_IME_HKL(hKL))
1182 hKL = UlongToHandle(MAKELONG(LOWORD(hKL), LOWORD(hKL)));
1183
1184 if (!ImmLoadIME(hKL))
1186
1188
1189 if ((GetWin32ClientInfo()->CI_flags & CI_CTFCOINIT) &&
1190 !(GetWin32ClientInfo()->CI_flags & CI_CTFTIM))
1191 {
1193 if (SUCCEEDED(hr))
1194 GetWin32ClientInfo()->CI_flags |= CI_CTFTIM;
1195 }
1196
1197 return hr;
1198}
#define UlongToHandle(ul)
Definition: basetsd.h:91
static BOOL Imm32IsRunningInMsoobe(VOID)
Definition: ctf.c:45
HRESULT CtfImmCoInitialize(VOID)
Definition: ctf.c:574
VOID Imm32TF_InvalidAssemblyListCacheIfExist(VOID)
Definition: ctf.c:189
static BOOL Imm32IsTIMDisabledInRegistry(VOID)
Definition: ctf.c:877
static BOOL Imm32IsCUASEnabledInRegistry(VOID)
Definition: ctf.c:61
BOOL g_disable_CUAS_flag
Definition: ctf.c:207
static BOOL Imm32IsInteractiveUserLogon(VOID)
Definition: ctf.c:23
BOOLEAN NTAPI RtlIsThreadWithinLoaderCallout(VOID)
Definition: libsupp.c:347
BOOL WINAPI ImmLoadIME(_In_ HKL hKL)
Definition: ime.c:612
#define CI_CTFTIM
Definition: ntuser.h:308
#define NtCurrentTeb
#define LOWORD(l)
Definition: pedump.c:82
#define MAKELONG(a, b)
Definition: typedefs.h:249

Referenced by CtfLoadThreadLayout(), and Imm32InternalLockIMC().

◆ GetKeyboardLayoutCP()

UINT WINAPI GetKeyboardLayoutCP ( _In_ LANGID  wLangId)

Definition at line 1297 of file imm.c.

1298{
1299 WCHAR szText[8];
1300 static LANGID s_wKeyboardLangIdCache = 0;
1301 static UINT s_uKeyboardLayoutCPCache = 0;
1302
1303 TRACE("(%u)\n", wLangId);
1304
1305 if (wLangId == s_wKeyboardLangIdCache)
1306 return s_uKeyboardLayoutCPCache;
1307
1308 if (!GetLocaleInfoW(wLangId, LOCALE_IDEFAULTANSICODEPAGE, szText, _countof(szText)))
1309 return 0;
1310
1311 s_wKeyboardLangIdCache = wLangId;
1312 szText[_countof(szText) - 1] = UNICODE_NULL; /* Avoid buffer overrun */
1313 s_uKeyboardLayoutCPCache = wcstol(szText, NULL, 10);
1314 return s_uKeyboardLayoutCPCache;
1315}
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: locale.c:1675
_ACRTIMP __msvcrt_long __cdecl wcstol(const wchar_t *, wchar_t **, int)
Definition: wcs.c:2747
USHORT LANGID
Definition: mui.h:9
#define UNICODE_NULL
short WCHAR
Definition: pedump.c:58
#define _countof(array)
Definition: sndvol32.h:70
#define LOCALE_IDEFAULTANSICODEPAGE
Definition: winnls.h:45

◆ ImmActivateLayout()

BOOL WINAPI ImmActivateLayout ( _In_ HKL  hKL)

Definition at line 450 of file imm.c.

451{
452 PIMEDPI pImeDpi;
453 HKL hOldKL;
455 HWND hwndDefIME = NULL;
456 SELECT_LAYOUT SelectLayout;
457
458 hOldKL = GetKeyboardLayout(0);
459
460 if (hOldKL == hKL && !(GetWin32ClientInfo()->CI_flags & CI_IMMACTIVATE))
461 return TRUE;
462
463 ImmLoadIME(hKL);
464
465 if (hOldKL != hKL)
466 {
467 pImeDpi = ImmLockImeDpi(hOldKL);
468 if (pImeDpi)
469 {
472 else
474 ImmUnlockImeDpi(pImeDpi);
475
477 }
478
479 hwndDefIME = ImmGetDefaultIMEWnd(NULL);
480 if (IsWindow(hwndDefIME))
481 SendMessageW(hwndDefIME, WM_IME_SELECT, FALSE, (LPARAM)hOldKL);
482
483 NtUserSetThreadLayoutHandles(hKL, hOldKL);
484 }
485
486 SelectLayout.hNewKL = hKL;
487 SelectLayout.hOldKL = hOldKL;
489
490 if (IsWindow(hwndDefIME))
491 SendMessageW(hwndDefIME, WM_IME_SELECT, TRUE, (LPARAM)hKL);
492
493 return TRUE;
494}
static BOOL CALLBACK Imm32SelectContextProc(HIMC hIMC, LPARAM lParam)
Definition: imm.c:433
static BOOL CALLBACK Imm32NotifyIMEProc(HIMC hIMC, LPARAM lParam)
Definition: imm.c:440
PIMEDPI WINAPI ImmLockImeDpi(_In_ HKL hKL)
Definition: ime.c:532
#define CPS_CANCEL
Definition: imm.h:181
#define CPS_COMPLETE
Definition: imm.h:178
HWND WINAPI ImmGetDefaultIMEWnd(_In_opt_ HWND hWnd)
Definition: ime.c:441
#define IME_PROP_COMPLETE_ON_UNSELECT
Definition: imm.h:250
DWORD NTAPI NtUserSetThreadLayoutHandles(_In_ HKL hNewKL, _In_ HKL hOldKL)
Definition: ime.c:537
#define CI_IMMACTIVATE
Definition: ntuser.h:306
IMEINFO ImeInfo
Definition: imm32_undoc.h:108
HKL hNewKL
Definition: imm.c:429
HKL hOldKL
Definition: imm.c:430
DWORD fdwProperty
Definition: immdev.h:22
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define WM_IME_SELECT
Definition: winuser.h:1861

Referenced by ImeWnd_OnImeSystem().

◆ ImmCallImeConsoleIME()

DWORD WINAPI ImmCallImeConsoleIME ( _In_ HWND  hWnd,
_In_ UINT  uMsg,
_In_ WPARAM  wParam,
_In_ LPARAM  lParam,
_Out_ LPUINT  puVK 
)

Definition at line 1179 of file keymsg.c.

1185{
1186 DWORD dwThreadId, ret = 0;
1187 HKL hKL;
1188 PWND pWnd = NULL;
1189 HIMC hIMC;
1190 PIMEDPI pImeDpi;
1191 UINT uVK;
1192 PIMC pIMC;
1193
1194 switch (uMsg)
1195 {
1196 case WM_KEYDOWN:
1197 case WM_KEYUP:
1198 case WM_SYSKEYDOWN:
1199 case WM_SYSKEYUP:
1200 break;
1201
1202 default:
1203 return 0;
1204 }
1205
1208
1209 if (hWnd && gpsi)
1210 pWnd = ValidateHwndNoErr(hWnd);
1211 if (IS_NULL_UNEXPECTEDLY(pWnd))
1212 return 0;
1213
1214 hIMC = ImmGetContext(hWnd);
1215 if (IS_NULL_UNEXPECTEDLY(hIMC))
1216 return 0;
1217
1218 uVK = *puVK = (wParam & 0xFF);
1219
1221 if (IS_NULL_UNEXPECTEDLY(pIMC))
1222 return 0;
1223
1224 pImeDpi = ImmLockImeDpi(hKL);
1225 if (IS_NULL_UNEXPECTEDLY(pImeDpi))
1226 return 0;
1227
1229 goto Quit;
1230
1231 switch (uVK)
1232 {
1233 case VK_DBE_ROMAN:
1234 case VK_DBE_NOROMAN:
1235 case VK_DBE_HIRAGANA:
1236 case VK_DBE_KATAKANA:
1237 case VK_DBE_CODEINPUT:
1238 case VK_DBE_NOCODEINPUT:
1241 break;
1242
1243 default:
1244 {
1245 if (uMsg == WM_SYSKEYDOWN || uMsg == WM_SYSKEYUP)
1246 {
1247 if (uVK != VK_MENU && uVK != VK_F10)
1248 goto Quit;
1249 }
1250
1251 if (!(pImeDpi->ImeInfo.fdwProperty & IME_PROP_NEED_ALTKEY))
1252 {
1253 if (uVK == VK_MENU || (lParam & MAKELPARAM(0, KF_ALTDOWN)))
1254 goto Quit;
1255 }
1256 }
1257 }
1258
1260
1261Quit:
1262 ImmUnlockImeDpi(pImeDpi);
1263 return ret;
1264}
DWORD HIMC
Definition: dimm.idl:75
#define VK_DBE_ROMAN
Definition: ime.h:46
#define VK_DBE_HIRAGANA
Definition: ime.h:43
#define VK_DBE_CODEINPUT
Definition: ime.h:51
#define VK_DBE_NOROMAN
Definition: ime.h:47
#define VK_DBE_KATAKANA
Definition: ime.h:42
#define VK_DBE_ENTERWORDREGISTERMODE
Definition: ime.h:48
#define VK_DBE_ENTERIMECONFIGMODE
Definition: ime.h:49
#define VK_DBE_NOCODEINPUT
Definition: ime.h:52
PSERVERINFO gpsi
Definition: imm.c:18
HIMC WINAPI ImmGetContext(_In_ HWND hWnd)
Definition: imm.c:1066
#define IME_PROP_NEED_ALTKEY
Definition: immdev.h:347
#define IME_PROP_IGNORE_UPKEYS
Definition: immdev.h:346
@ TYPE_INPUTCONTEXT
Definition: ntuser.h:57
DWORD WINAPI ImmProcessKey(_In_ HWND hWnd, _In_ HKL hKL, _In_ UINT vKey, _In_ LPARAM lParam, _In_ DWORD dwHotKeyID)
Definition: keymsg.c:740
Definition: ntuser.h:694
Definition: ntuser.h:199
LPVOID FASTCALL ValidateHandleNoErr(HANDLE hObject, UINT uType)
Definition: utils.c:201
#define ValidateHwndNoErr(hwnd)
Definition: precomp.h:97
#define INVALID_HOTKEY_ID
Definition: precomp.h:78
DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)
#define MAKELPARAM(l, h)
Definition: winuser.h:4116
#define WM_KEYUP
Definition: winuser.h:1744
#define VK_F10
Definition: winuser.h:2300
#define KF_ALTDOWN
Definition: winuser.h:2485
#define KF_UP
Definition: winuser.h:2487
#define WM_SYSKEYUP
Definition: winuser.h:1748
#define WM_KEYDOWN
Definition: winuser.h:1743
#define WM_SYSKEYDOWN
Definition: winuser.h:1747
#define VK_MENU
Definition: winuser.h:2240

Referenced by ConIme_OnRoute().

◆ ImmFreeLayout()

BOOL WINAPI ImmFreeLayout ( _In_ HKL  hKL)

Definition at line 124 of file imm.c.

125{
126 WCHAR szKBD[KL_NAMELENGTH];
127 UINT iKL, cKLs;
128 HKL hOldKL, *pList;
129 PIMEDPI pImeDpi;
131
132 TRACE("(%p)\n", hKL);
133
134 hOldKL = GetKeyboardLayout(0);
135
136 if (hKL == HKL_SWITCH_TO_NON_IME)
137 {
138 if (!IS_IME_HKL(hOldKL))
139 return TRUE;
140
142
143 cKLs = GetKeyboardLayoutList(0, NULL);
144 if (cKLs)
145 {
146 pList = ImmLocalAlloc(0, cKLs * sizeof(HKL));
148 return FALSE;
149
150 cKLs = GetKeyboardLayoutList(cKLs, pList);
151 for (iKL = 0; iKL < cKLs; ++iKL)
152 {
153 if (!IS_IME_HKL(pList[iKL]))
154 {
155 LangID = LOWORD(pList[iKL]);
156 break;
157 }
158 }
159
161 }
162
163 StringCchPrintfW(szKBD, _countof(szKBD), L"%08X", LangID);
165 {
166 WARN("Default to English US\n");
167 LoadKeyboardLayoutW(L"00000409", KLF_ACTIVATE | 0x200);
168 }
169 }
170 else if (hKL == HKL_RELEASE_IME)
171 {
173Retry:
174 for (pImeDpi = gpImeDpiList; pImeDpi; pImeDpi = pImeDpi->pNext)
175 {
176 if (Imm32ReleaseIME(pImeDpi->hKL))
177 goto Retry;
178 }
180 }
181 else
182 {
183 if (IS_IME_HKL(hKL) && hKL != hOldKL)
184 Imm32ReleaseIME(hKL);
185 }
186
187 return TRUE;
188}
#define WARN(fmt,...)
Definition: precomp.h:61
_In_ PSCSI_REQUEST_BLOCK _Out_ NTSTATUS _Inout_ BOOLEAN * Retry
Definition: classpnp.h:312
LCID WINAPI GetSystemDefaultLCID(void)
Definition: locale.c:1235
#define L(x)
Definition: resources.c:13
FxChildList * pList
RTL_CRITICAL_SECTION gcsImeDpi
Definition: ime.c:17
PIMEDPI gpImeDpiList
Definition: ime.c:18
BOOL Imm32ReleaseIME(_In_ HKL hKL)
Definition: ime.c:379
#define HKL_SWITCH_TO_NON_IME
Definition: imm32_undoc.h:29
#define HKL_RELEASE_IME
Definition: imm32_undoc.h:30
NTSYSAPI NTSTATUS NTAPI RtlEnterCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI NTSTATUS NTAPI RtlLeaveCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
#define LANGIDFROMLCID(l)
Definition: nls.h:18
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
HKL hKL
Definition: imm32_undoc.h:107
struct IMEDPI * pNext
Definition: imm32_undoc.h:105
_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
Definition: wdfusb.h:1083
#define KL_NAMELENGTH
Definition: winuser.h:122
#define KLF_ACTIVATE
Definition: winuser.h:111
HKL WINAPI LoadKeyboardLayoutW(_In_ LPCWSTR, _In_ UINT)
UINT WINAPI GetKeyboardLayoutList(_In_ int nBuff, _Out_writes_to_opt_(nBuff, return) HKL FAR *lpList)

Referenced by ImeWnd_OnImeSystem().

◆ ImmGetAppCompatFlags()

DWORD WINAPI ImmGetAppCompatFlags ( _In_ HIMC  hIMC)

Definition at line 722 of file keymsg.c.

723{
724 TRACE("(%p)\n", hIMC);
725
726 PCLIENTIMC pClientIMC = ImmLockClientImc(hIMC);
727 if (IS_NULL_UNEXPECTEDLY(pClientIMC))
728 return 0;
729
730 DWORD dwCompatFlags = pClientIMC->dwCompatFlags;
731 ImmUnlockClientImc(pClientIMC);
732 return (dwCompatFlags | g_aimm_compat_flags);
733}
DWORD dwCompatFlags
Definition: imm32_undoc.h:164

Referenced by ImmProcessKey().

◆ ImmGetHotKey()

BOOL WINAPI ImmGetHotKey ( _In_ DWORD  dwHotKey,
_Out_ LPUINT  lpuModifiers,
_Out_ LPUINT  lpuVKey,
_Out_opt_ LPHKL  lphKL 
)

Definition at line 648 of file keymsg.c.

653{
654 TRACE("(0x%lX, %p, %p, %p)\n", dwHotKey, lpuModifiers, lpuVKey, lphKL);
655 if (lpuModifiers && lpuVKey)
656 return NtUserGetImeHotKey(dwHotKey, lpuModifiers, lpuVKey, lphKL);
657 return FALSE;
658}
BOOL NTAPI NtUserGetImeHotKey(_In_ DWORD dwHotKeyId, _Out_ PUINT lpuModifiers, _Out_ PUINT lpuVirtualKey, _Out_opt_ LPHKL lphKL)
Definition: ime.c:429

◆ ImmGetImeInfoEx()

BOOL WINAPI ImmGetImeInfoEx ( _Out_ PIMEINFOEX  pImeInfoEx,
_In_ IMEINFOEXCLASS  SearchType,
_In_ PVOID  pvSearchKey 
)

◆ ImmIMPGetIMEA()

BOOL WINAPI ImmIMPGetIMEA ( _In_opt_ HWND  hWnd,
_Out_ LPIMEPROA  pImePro 
)

Definition at line 68 of file imepro.c.

71{
73
74 TRACE("(%p, %p)\n", hWnd, pImePro);
75
76 ASSERT(pImePro);
77
79 {
81 return FALSE;
82 }
83
84 IMEPROW ImeProW;
85 HKL hKL = GetKeyboardLayout(0);
86 if (!Imm32IMPGetIME(hKL, &ImeProW))
87 return FALSE;
88
89 Imm32ConvertImeProWideToAnsi(&ImeProW, pImePro);
90 return TRUE;
91}
#define ERROR_CALL_NOT_IMPLEMENTED
Definition: compat.h:102
#define SetLastError(x)
Definition: compat.h:752
static VOID Imm32ConvertImeProWideToAnsi(_In_ const IMEPROW *pProW, _Out_ PIMEPROA pProA)
Definition: imepro.c:18
static BOOL Imm32IMPGetIME(_In_ HKL hKL, _Out_ PIMEPROW pProW)
Definition: imepro.c:41
#define ASSERT(a)
Definition: mode.c:44
BOOL Imm32IsSystemJapaneseOrKorean(VOID)
Definition: utils.c:72

Referenced by IMPGetIMEA().

◆ ImmIMPGetIMEW()

BOOL WINAPI ImmIMPGetIMEW ( _In_opt_ HWND  hWnd,
_Out_ LPIMEPROW  pImePro 
)

Definition at line 97 of file imepro.c.

100{
102
103 TRACE("(%p, %p)\n", hWnd, pImePro);
104
105 ASSERT(pImePro);
106
108 {
110 return FALSE;
111 }
112
113 HKL hKL = GetKeyboardLayout(0);
114 return Imm32IMPGetIME(hKL, pImePro);
115}

Referenced by IMPGetIMEW().

◆ ImmIMPQueryIMEA()

BOOL WINAPI ImmIMPQueryIMEA ( _Inout_ LPIMEPROA  pImePro)

Definition at line 121 of file imepro.c.

122{
123 TRACE("(%p)\n", pImePro);
124
125 ASSERT(pImePro);
126
128 {
130 return FALSE;
131 }
132
133 IMEPROW ProW;
134 if (pImePro->szName[0])
135 {
136 /* pImePro->szName is BYTE[], so we need type cast */
137 if (!MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (PSTR)pImePro->szName, -1,
138 ProW.szName, _countof(ProW.szName)))
139 {
140 ERR("szName: %s\n", debugstr_a((PSTR)pImePro->szName));
141 return FALSE;
142 }
143 ProW.szName[_countof(ProW.szName) - 1] = UNICODE_NULL; /* Avoid buffer overrun */
144 }
145 else
146 {
147 ProW.szName[0] = UNICODE_NULL;
148 }
149
150 if (!ImmIMPQueryIMEW(&ProW))
151 return FALSE;
152
153 Imm32ConvertImeProWideToAnsi(&ProW, pImePro);
154 return TRUE;
155}
#define CP_ACP
Definition: compat.h:109
#define MultiByteToWideChar
Definition: compat.h:110
BOOL WINAPI ImmIMPQueryIMEW(_Inout_ LPIMEPROW pImePro)
Definition: imepro.c:161
#define debugstr_a
Definition: kernel32.h:31
WCHAR szName[80]
Definition: winnls32.h:34
char * PSTR
Definition: typedefs.h:51
#define MB_PRECOMPOSED
Definition: winnls.h:299

Referenced by IMPQueryIMEA().

◆ ImmIMPQueryIMEW()

BOOL WINAPI ImmIMPQueryIMEW ( _Inout_ LPIMEPROW  pImePro)

Definition at line 161 of file imepro.c.

162{
163 TRACE("(%p)\n", pImePro);
164
165 ASSERT(pImePro);
166
168 {
170 return FALSE;
171 }
172
173 INT nLayouts = GetKeyboardLayoutList(0, NULL);
174 if (nLayouts <= 0)
175 {
176 ERR("nLayouts: %d\n", nLayouts);
177 return FALSE;
178 }
179
180 HKL *phKLs = ImmLocalAlloc(0, nLayouts * sizeof(HKL));
181 if (!phKLs)
182 {
183 ERR("Out of memory\n");
184 return FALSE;
185 }
186
187 if (GetKeyboardLayoutList(nLayouts, phKLs) != nLayouts)
188 {
189 ERR("KL count mismatch\n");
190 ImmLocalFree(phKLs);
191 return FALSE;
192 }
193
194 BOOL result = FALSE;
195 if (pImePro->szName[0])
196 {
197 IMEINFOEX ImeInfoEx;
198 if (ImmGetImeInfoEx(&ImeInfoEx, ImeInfoExImeFileName, pImePro->szName))
199 {
200 for (INT iKL = 0; iKL < nLayouts; ++iKL)
201 {
202 if (phKLs[iKL] == ImeInfoEx.hkl)
203 {
204 result = Imm32IMPGetIME(phKLs[iKL], pImePro);
205 break;
206 }
207 }
208 }
209 }
210 else
211 {
212 for (INT iKL = 0; iKL < nLayouts; ++iKL)
213 {
214 result = Imm32IMPGetIME(phKLs[iKL], pImePro);
215 if (result)
216 break;
217 }
218 }
219
220 ImmLocalFree(phKLs);
221 return result;
222}
GLuint64EXT * result
Definition: glext.h:11304
BOOL WINAPI ImmGetImeInfoEx(_Out_ PIMEINFOEX pImeInfoEx, _In_ IMEINFOEXCLASS SearchType, _In_ PVOID pvSearchKey)
int32_t INT
Definition: typedefs.h:58

Referenced by ImmIMPQueryIMEA(), and IMPQueryIMEW().

◆ ImmIMPSetIMEA()

BOOL WINAPI ImmIMPSetIMEA ( _In_opt_ HWND  hWnd,
_Inout_ LPIMEPROA  pImePro 
)

Definition at line 228 of file imepro.c.

231{
232 TRACE("(%p, %p)\n", hWnd, pImePro);
233
234 ASSERT(pImePro);
235
236 IMEPROW ProW;
238 {
240 return FALSE;
241 }
242
243 if (pImePro->szName[0])
244 {
245 /* pImePro->szName is BYTE[], so we need type cast */
246 if (!MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (PSTR)pImePro->szName, -1,
247 ProW.szName, _countof(ProW.szName)))
248 {
249 ERR("szName: %s\n", debugstr_a((PSTR)pImePro->szName));
250 return FALSE;
251 }
252 ProW.szName[_countof(ProW.szName) - 1] = UNICODE_NULL; /* Avoid buffer overrun */
253 }
254 else
255 {
256 ProW.szName[0] = UNICODE_NULL;
257 }
258
259 return ImmIMPSetIMEW(hWnd, &ProW);
260}
BOOL WINAPI ImmIMPSetIMEW(_In_opt_ HWND hWnd, _Inout_ LPIMEPROW pImePro)
Definition: imepro.c:266

Referenced by IMPSetIMEA().

◆ ImmIMPSetIMEW()

BOOL WINAPI ImmIMPSetIMEW ( _In_opt_ HWND  hWnd,
_Inout_ LPIMEPROW  pImePro 
)

Definition at line 266 of file imepro.c.

269{
271
272 TRACE("(%p, %p)\n", hWnd, pImePro);
273
274 ASSERT(pImePro);
275
277 {
279 return FALSE;
280 }
281
282 HKL hTargetKL = NULL;
283 if (pImePro->szName[0])
284 {
285 IMEINFOEX ImeInfoEx;
286 if (!ImmGetImeInfoEx(&ImeInfoEx, ImeInfoExImeFileName, pImePro->szName))
287 return FALSE;
288
289 hTargetKL = ImeInfoEx.hkl;
290 }
291 else
292 {
293 INT nLayouts = GetKeyboardLayoutList(0, NULL);
294 if (nLayouts <= 0)
295 {
296 ERR("nLayouts: %d\n", nLayouts);
297 return FALSE;
298 }
299
300 HKL *phKLs = ImmLocalAlloc(0, nLayouts * sizeof(HKL));
301 if (!phKLs)
302 {
303 ERR("Out of memory\n");
304 return FALSE;
305 }
306
307 if (GetKeyboardLayoutList(nLayouts, phKLs) == nLayouts)
308 {
309 for (INT iKL = 0; iKL < nLayouts; ++iKL)
310 {
311 if (!ImmIsIME(phKLs[iKL]))
312 {
313 hTargetKL = phKLs[iKL];
314 break;
315 }
316 }
317 }
318 else
319 {
320 ERR("KL count mismatch\n");
321 }
322
323 ImmLocalFree(phKLs);
324 }
325
326 if (hTargetKL && GetKeyboardLayout(0) != hTargetKL)
327 {
328 HWND hwndFocus = GetFocus();
329 if (hwndFocus)
330 {
331 PostMessageW(hwndFocus, WM_INPUTLANGCHANGEREQUEST, INPUTLANGCHANGE_SYSCHARSET,
332 (LPARAM)hTargetKL);
333 return TRUE;
334 }
335 }
336
337 return FALSE;
338}
HWND WINAPI GetFocus(void)
Definition: window.c:1863

Referenced by ImmIMPSetIMEA(), and IMPSetIMEW().

◆ ImmLoadIME()

BOOL WINAPI ImmLoadIME ( _In_ HKL  hKL)

Definition at line 612 of file ime.c.

613{
614 PIMEDPI pImeDpi;
615
616 if (!IS_IME_HKL(hKL) && (!IS_CICERO_MODE() || IS_16BIT_MODE()))
617 {
618 TRACE("\n");
619 return FALSE;
620 }
621
622 pImeDpi = Imm32FindImeDpi(hKL);
623 if (pImeDpi == NULL)
624 pImeDpi = Imm32LoadImeDpi(hKL, FALSE);
625 return (pImeDpi != NULL);
626}
static PIMEDPI Imm32LoadImeDpi(HKL hKL, BOOL bLock)
Definition: ime.c:282
PIMEDPI Imm32FindImeDpi(HKL hKL)
Definition: ime.c:20

Referenced by CtfImmTIMActivate(), CtfLoadThreadLayout(), and ImmActivateLayout().

◆ ImmLoadLayout()

BOOL WINAPI ImmLoadLayout ( _In_ HKL  hKL,
_Inout_ PIMEINFOEX  pImeInfoEx 
)

Definition at line 71 of file imm.c.

74{
75 DWORD cbData, dwType;
76 HKEY hKey;
78 WCHAR szLayout[MAX_PATH];
80
81 TRACE("(%p, %p)\n", hKL, pImeInfoEx);
82
83 /* Choose a key */
84 if (IS_IME_HKL(hKL) || !IS_CICERO_MODE() || IS_16BIT_MODE()) /* Non-Cicero? */
85 {
86 StringCchPrintfW(szLayout, _countof(szLayout), L"%s\\%08lX",
88 pszSubKey = szLayout;
89 }
90 else /* Cicero */
91 {
92 pszSubKey = L"Software\\Microsoft\\Windows NT\\CurrentVersion\\IMM";
93 }
94
95 /* Open the key */
98 return FALSE;
99
100 /* Load "IME File" value */
101 cbData = sizeof(pImeInfoEx->wszImeFile);
102 error = RegQueryValueExW(hKey, L"IME File", NULL, &dwType,
103 (LPBYTE)pImeInfoEx->wszImeFile, &cbData);
104
105 /* Avoid buffer overrun */
106 pImeInfoEx->wszImeFile[_countof(pImeInfoEx->wszImeFile) - 1] = UNICODE_NULL;
107
109
110 if (error != ERROR_SUCCESS || dwType != REG_SZ)
111 return FALSE; /* Failed */
112
113 pImeInfoEx->hkl = hKL;
114 pImeInfoEx->fLoadFlag = 0;
115 return Imm32LoadImeVerInfo(pImeInfoEx);
116}
#define HandleToUlong(h)
Definition: basetsd.h:73
#define RegCloseKey(hKey)
Definition: registry.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
#define MAX_PATH
Definition: compat.h:34
FxAutoRegKey hKey
#define REG_SZ
Definition: layer.c:22
#define error(str)
Definition: mkdosfs.c:1605
#define KEY_READ
Definition: nt_native.h:1026
_In_opt_ _In_opt_ _In_ _In_ DWORD cbData
Definition: shlwapi.h:761
_In_opt_ LPCSTR pszSubKey
Definition: shlwapi.h:783
const uint16_t * LPCWSTR
Definition: typedefs.h:57
unsigned char * LPBYTE
Definition: typedefs.h:53
BOOL Imm32LoadImeVerInfo(_Inout_ PIMEINFOEX pImeInfoEx)
Definition: install.c:413
#define REGKEY_KEYBOARD_LAYOUTS
Definition: precomp.h:82
#define IS_ERROR_UNEXPECTEDLY(x)
Definition: precomp.h:70
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by Imm32LoadCtfIme(), and User32CallImmLoadLayoutFromKernel().

◆ ImmLockClientImc()

PCLIENTIMC WINAPI ImmLockClientImc ( _In_ HIMC  hImc)

Definition at line 955 of file imm.c.

956{
957 PIMC pIMC;
958 PCLIENTIMC pClientImc;
959
960 TRACE("(%p)\n", hImc);
961
962 if (IS_NULL_UNEXPECTEDLY(hImc))
963 return NULL;
964
965 pIMC = ValidateHandle(hImc, TYPE_INPUTCONTEXT);
966 if (!pIMC || !Imm32CheckImcProcess(pIMC))
967 return NULL;
968
969 pClientImc = (PCLIENTIMC)pIMC->dwClientImcData;
970 if (pClientImc)
971 {
972 if (pClientImc->dwFlags & CLIENTIMC_DESTROY)
973 return NULL;
974 goto Finish;
975 }
976
977 pClientImc = ImmLocalAlloc(HEAP_ZERO_MEMORY, sizeof(CLIENTIMC));
978 if (IS_NULL_UNEXPECTEDLY(pClientImc))
979 return NULL;
980
981 RtlInitializeCriticalSection(&pClientImc->cs);
983
985 {
986 ERR("\n");
987 ImmLocalFree(pClientImc);
988 return NULL;
989 }
990
991 pClientImc->dwFlags |= CLIENTIMC_LOCKED;
992
993Finish:
994 InterlockedIncrement(&pClientImc->cLockObj);
995 return pClientImc;
996}
#define InterlockedIncrement
Definition: armddk.h:53
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
PTHEME_CLASS ValidateHandle(HTHEME hTheme)
Definition: system.c:772
struct tagCLIENTIMC * PCLIENTIMC
#define CLIENTIMC_LOCKED
Definition: imm32_undoc.h:187
#define CLIENTIMC_DESTROY
Definition: imm32_undoc.h:185
@ THREADSTATE_IMECOMPATFLAGS
Definition: ntuser.h:2502
BOOL NTAPI NtUserUpdateInputContext(HIMC hIMC, DWORD dwType, DWORD_PTR dwValue)
Definition: ime.c:1862
DWORD_PTR NTAPI NtUserGetThreadState(DWORD Routine)
Definition: misc.c:240
if(dx< 0)
Definition: linetemp.h:194
NTSYSAPI NTSTATUS NTAPI RtlInitializeCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
RTL_CRITICAL_SECTION cs
Definition: imm32_undoc.h:165
ULONG_PTR dwClientImcData
Definition: ntuser.h:202
@ UIC_CLIENTIMCDATA
Definition: undocuser.h:323
BOOL Imm32CheckImcProcess(PIMC pIMC)
Definition: utils.c:252

Referenced by CtfImmGenerateMessage(), CtfImmTIMCreateInputContext(), Imm32InternalLockIMC(), Imm32IsImcAnsi(), Imm32ProcessRequest(), Imm32SelectInputContext(), ImmGenerateMessage(), ImmGetAppCompatFlags(), ImmGetCandidateListAW(), ImmGetCandidateListCountAW(), ImmGetCompositionFontA(), ImmGetCompositionFontW(), ImmGetCompositionStringA(), ImmGetCompositionStringW(), ImmGetGuideLineAW(), ImmGetIMCLockCount(), ImmGetSaveContext(), ImmPostMessages(), ImmSetActiveContext(), ImmSetCompositionFontA(), ImmSetCompositionFontW(), ImmUnlockIMC(), and ImmWINNLSEnableIME().

◆ ImmLockImeDpi()

PIMEDPI WINAPI ImmLockImeDpi ( _In_ HKL  hKL)

Definition at line 532 of file ime.c.

533{
534 PIMEDPI pImeDpi = NULL;
535
536 TRACE("(%p)\n", hKL);
537
539
540 /* Find by hKL */
541 for (pImeDpi = gpImeDpiList; pImeDpi; pImeDpi = pImeDpi->pNext)
542 {
543 if (pImeDpi->hKL == hKL) /* found */
544 {
545 /* lock if possible */
546 if (pImeDpi->dwFlags & IMEDPI_FLAG_UNLOADED)
547 pImeDpi = NULL;
548 else
549 ++(pImeDpi->cLockObj);
550 break;
551 }
552 }
553
555 return pImeDpi;
556}
#define IMEDPI_FLAG_UNLOADED
Definition: imm32_undoc.h:152
DWORD dwFlags
Definition: imm32_undoc.h:112
DWORD cLockObj
Definition: imm32_undoc.h:111

Referenced by Imm32CreateInputContext(), Imm32DestroyInputContext(), Imm32FindOrLoadImeDpi(), Imm32MakeIMENotify(), Imm32ProcessHotKey(), Imm32SelectInputContext(), ImmActivateLayout(), ImmCallImeConsoleIME(), ImmCreateSoftKeyboard(), ImmGetImeMenuItemsAW(), ImmNotifyIME(), ImmProcessKey(), ImmSetActiveContext(), ImmSetCompositionStringAW(), ImmTranslateMessage(), and User32CreateImeUIWindow().

◆ ImmProcessKey()

DWORD WINAPI ImmProcessKey ( _In_  HWND,
_In_  HKL,
_In_  UINT,
_In_  LPARAM,
_In_  DWORD 
)

Definition at line 740 of file keymsg.c.

746{
747 DWORD ret = 0;
748 HIMC hIMC;
749 PIMEDPI pImeDpi;
751 BYTE KeyState[256];
752 BOOL bLowWordOnly = FALSE, bSkipThisKey = FALSE, bHotKeyDone = TRUE;
753
754 TRACE("(%p, %p, 0x%X, %p, 0x%lX)\n", hWnd, hKL, vKey, lParam, dwHotKeyID);
755
756 /* Process the key by the IME */
757 hIMC = ImmGetContext(hWnd);
758 pImeDpi = ImmLockImeDpi(hKL);
759 if (pImeDpi)
760 {
761 pIC = (LPINPUTCONTEXTDX)ImmLockIMC(hIMC);
762 if (pIC)
763 {
764 if ((LOBYTE(vKey) == VK_PACKET) &&
766 {
767 if (ImeDpi_IsUnicode(pImeDpi))
768 {
769 bLowWordOnly = TRUE;
770 }
771 else
772 {
773 if (pIC->fOpen)
775
776 bSkipThisKey = TRUE;
777 }
778 }
779
780 if (!bSkipThisKey && GetKeyboardState(KeyState))
781 {
782 UINT vk = (bLowWordOnly ? LOWORD(vKey) : vKey);
783 if (pImeDpi->ImeProcessKey(hIMC, vk, lParam, KeyState))
784 {
785 pIC->bNeedsTrans = TRUE;
786 pIC->nVKey = vKey;
788 }
789 }
790
791 ImmUnlockIMC(hIMC);
792 }
793
794 ImmUnlockImeDpi(pImeDpi);
795 }
796
797 /* Process the hot-key if necessary */
798 if (!CtfImmIsCiceroStartedInThread()) /* Not Cicero? */
799 {
800 /* Process IMM IME hotkey */
801 if ((dwHotKeyID == INVALID_HOTKEY_ID) || !Imm32ProcessHotKey(hWnd, hIMC, hKL, dwHotKeyID))
802 bHotKeyDone = FALSE;
803 }
804 else if (!CtfImeProcessCicHotkey(hIMC, vKey, lParam)) /* CTF IME not processed the hotkey? */
805 {
806 /* Process IMM IME hotkey */
807 if (!IS_IME_HKL(hKL) ||
808 ((dwHotKeyID == INVALID_HOTKEY_ID) || !Imm32ProcessHotKey(hWnd, hIMC, hKL, dwHotKeyID)))
809 {
810 bHotKeyDone = FALSE;
811 }
812 }
813
814 if (bHotKeyDone && ((vKey != VK_KANJI) || (dwHotKeyID != IME_JHOTKEY_CLOSE_OPEN)))
815 ret |= IPHK_HOTKEY;
816
818 {
819 /* The key has been processed by IME's ImeProcessKey */
821 if ((PRIMARYLANGID(wLangID) == LANG_KOREAN) &&
822 ((vKey == VK_PROCESSKEY) || (ret & IPHK_HOTKEY)))
823 {
824 /* Korean don't want VK_PROCESSKEY and IME hot-keys */
825 }
826 else
827 {
828 /* Add WM_KEYDOWN:VK_PROCESSKEY message */
830
831 ret &= ~IPHK_PROCESSBYIME;
833 }
834 }
835
836 ImmReleaseContext(hWnd, hIMC);
837 return ret; /* Returns IPHK_... flags */
838}
unsigned short vk
Definition: console.c:118
BOOL WINAPI CtfImmIsCiceroStartedInThread(VOID)
Definition: ctf.c:781
struct INPUTCONTEXTDX * LPINPUTCONTEXTDX
#define _IME_APP_COMPAT_PROCESS_BY_IME
Definition: imm32_undoc.h:221
#define IME_JHOTKEY_CLOSE_OPEN
Definition: imm.h:200
BOOL WINAPI ImmReleaseContext(_In_ HWND hWnd, _In_ HIMC hIMC)
Definition: imm.c:1110
#define IME_PROP_ACCEPT_WIDE_VKEY
Definition: immdev.h:349
#define LOBYTE(W)
Definition: jmemdos.c:487
static BOOL Imm32ProcessHotKey(HWND hWnd, HIMC hIMC, HKL hKL, DWORD dwHotKeyID)
Definition: keymsg.c:252
DWORD WINAPI ImmGetAppCompatFlags(_In_ HIMC hIMC)
Definition: keymsg.c:722
BOOL WINAPI ImmTranslateMessage(_In_ HWND hwnd, _In_ UINT msg, _In_ WPARAM wParam, _In_ LPARAM lKeyData)
Definition: keymsg.c:1016
EXTERN_C HRESULT WINAPI CtfImeProcessCicHotkey(_In_ HIMC hIMC, _In_ UINT vKey, _In_ LPARAM lParam)
Definition: msctfime.cpp:795
#define PRIMARYLANGID(l)
Definition: nls.h:16
#define LANG_KOREAN
Definition: nls.h:84
#define IPHK_SKIPTHISKEY
Definition: undocuser.h:143
#define IPHK_HOTKEY
Definition: undocuser.h:140
#define IPHK_PROCESSBYIME
Definition: undocuser.h:141
#define ImeDpi_IsUnicode(pImeDpi)
Definition: precomp.h:117
#define VK_PROCESSKEY
Definition: winuser.h:2363
_Check_return_ BOOL WINAPI GetKeyboardState(_Out_writes_(256) PBYTE lpKeyState)
#define VK_KANJI
Definition: winuser.h:2249
unsigned char BYTE
Definition: xxhash.c:193

Referenced by ImmCallImeConsoleIME(), and User32CallImmProcessKeyFromKernel().

◆ ImmPutImeMenuItemsIntoMappedFile()

BOOL WINAPI ImmPutImeMenuItemsIntoMappedFile ( _In_ HIMC  hIMC)

Definition at line 731 of file imemenu.c.

732{
733 /* Open the existing file mapping */
735 if (!hMapping)
736 {
737 ERR("OpenFileMappingW failed\n");
738 return FALSE;
739 }
740
741 PIMEMENUINFO pView = MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
742 if (!pView)
743 {
744 ERR("MapViewOfFile failed\n");
745 CloseHandle(hMapping);
746 return FALSE;
747 }
748
749 BOOL ret = Imm32SerializeImeMenu(hIMC, pView);
750 UnmapViewOfFile(pView);
751 CloseHandle(hMapping);
752 return ret;
753}
#define CloseHandle
Definition: compat.h:739
#define UnmapViewOfFile
Definition: compat.h:746
#define MapViewOfFile
Definition: compat.h:745
HANDLE NTAPI OpenFileMappingW(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN LPCWSTR lpName)
Definition: filemap.c:297
#define IMEMENUINFO_MAPPING_NAME
Definition: imemenu.c:19
static BOOL Imm32SerializeImeMenu(HIMC hIMC, PIMEMENUINFO pView)
Definition: imemenu.c:312
#define FILE_MAP_ALL_ACCESS
Definition: winbase.h:158

Referenced by ImeWnd_OnImeSystem().

◆ ImmSendIMEMessageExA()

LRESULT WINAPI ImmSendIMEMessageExA ( _In_ HWND  hWnd,
_In_ LPARAM  lParam 
)

Definition at line 1002 of file win3send.c.

1005{
1006#ifdef IMM_WIN3_SUPPORT
1007 return Imm32SendIMEMessageExAW(hWnd, (HGLOBAL)lParam, TRUE);
1008#else
1009 return 0;
1010#endif
1011}

Referenced by SendIMEMessageExA().

◆ ImmSendIMEMessageExW()

LRESULT WINAPI ImmSendIMEMessageExW ( _In_ HWND  hWnd,
_In_ LPARAM  lParam 
)

Definition at line 1017 of file win3send.c.

1020{
1021#ifdef IMM_WIN3_SUPPORT
1022 return Imm32SendIMEMessageExAW(hWnd, (HGLOBAL)lParam, FALSE);
1023#else
1024 return 0;
1025#endif
1026}

Referenced by SendIMEMessageExW().

◆ ImmSetActiveContext()

BOOL WINAPI ImmSetActiveContext ( _In_ HWND  hwnd,
_In_opt_ HIMC  hIMC,
_In_ BOOL  fFlag 
)

Definition at line 1165 of file imm.c.

1169{
1170 PCLIENTIMC pClientImc;
1171 LPINPUTCONTEXTDX pIC;
1172 PIMEDPI pImeDpi;
1173 HIMC hOldIMC;
1174 HKL hKL;
1175 BOOL fOpen = FALSE;
1176 DWORD dwConversion = 0, dwShowFlags = ISC_SHOWUIALL;
1177 HWND hwndDefIME;
1178
1179 TRACE("(%p, %p, %d)\n", hWnd, hIMC, fActive);
1180
1181 if (!IS_IMM_MODE())
1182 {
1183 TRACE("\n");
1184 return FALSE;
1185 }
1186
1187 pClientImc = ImmLockClientImc(hIMC);
1188
1189 if (!fActive)
1190 {
1191 if (pClientImc)
1192 pClientImc->dwFlags &= ~CLIENTIMC_ACTIVE;
1193 }
1194 else if (hIMC)
1195 {
1196 if (IS_NULL_UNEXPECTEDLY(pClientImc))
1197 return FALSE;
1198
1199 pIC = (LPINPUTCONTEXTDX)ImmLockIMC(hIMC);
1200 if (IS_NULL_UNEXPECTEDLY(pIC))
1201 {
1202 ImmUnlockClientImc(pClientImc);
1203 return FALSE;
1204 }
1205
1206 pIC->hWnd = hWnd;
1207 pClientImc->dwFlags |= CLIENTIMC_ACTIVE;
1208
1209 if (pIC->dwUIFlags & _IME_UI_HIDDEN)
1211
1212 fOpen = pIC->fOpen;
1213 dwConversion = pIC->fdwConversion;
1214
1215 ImmUnlockIMC(hIMC);
1216 }
1217 else
1218 {
1219 hOldIMC = ImmGetSaveContext(hWnd, 1);
1220 pIC = (LPINPUTCONTEXTDX)ImmLockIMC(hOldIMC);
1221 if (pIC)
1222 {
1223 pIC->hWnd = hWnd;
1224 ImmUnlockIMC(hOldIMC);
1225 }
1226 }
1227
1228 hKL = GetKeyboardLayout(0);
1229 if (IS_CICERO_MODE() && !IS_16BIT_MODE())
1230 {
1231 CtfImeSetActiveContextAlways(hIMC, fActive, hWnd, hKL);
1232 hKL = GetKeyboardLayout(0);
1233 }
1234
1235 pImeDpi = ImmLockImeDpi(hKL);
1236 if (pImeDpi)
1237 {
1238 if (IS_IME_HKL(hKL))
1239 pImeDpi->ImeSetActiveContext(hIMC, fActive);
1240 ImmUnlockImeDpi(pImeDpi);
1241 }
1242
1243 if (IsWindow(hWnd))
1244 {
1245 SendMessageW(hWnd, WM_IME_SETCONTEXT, fActive, dwShowFlags);
1246 if (fActive)
1247 NtUserNotifyIMEStatus(hWnd, fOpen, dwConversion);
1248 }
1249 else if (!fActive)
1250 {
1251 hwndDefIME = ImmGetDefaultIMEWnd(NULL);
1252 if (hwndDefIME)
1253 SendMessageW(hwndDefIME, WM_IME_SETCONTEXT, 0, dwShowFlags);
1254 }
1255
1256 if (pClientImc)
1257 ImmUnlockClientImc(pClientImc);
1258
1259 return TRUE;
1260}
LPINPUTCONTEXT WINAPI ImmLockIMC(_In_ HIMC hIMC)
Definition: imm.c:1080
PCLIENTIMC WINAPI ImmLockClientImc(_In_ HIMC hImc)
Definition: imm.c:955
HIMC ImmGetSaveContext(_In_opt_ HWND hWnd, _In_ DWORD dwContextFlags)
Definition: imm.c:1022
BOOL WINAPI ImmUnlockIMC(_In_ HIMC hIMC)
Definition: imm.c:1090
VOID WINAPI ImmUnlockClientImc(_Inout_ PCLIENTIMC pClientImc)
Definition: imm.c:1002
#define _IME_UI_HIDDEN
Definition: imm32_undoc.h:214
#define CLIENTIMC_ACTIVE
Definition: imm32_undoc.h:184
#define ISC_SHOWUIGUIDELINE
Definition: imm.h:173
#define ISC_SHOWUIALLCANDIDATEWINDOW
Definition: imm.h:174
#define ISC_SHOWUIALL
Definition: imm.h:175
DWORD NTAPI NtUserNotifyIMEStatus(_In_ HWND hwnd, _In_ BOOL fOpen, _In_ DWORD dwConversion)
Definition: ime.c:850
#define IS_IMM_MODE()
Definition: ntuser.h:1212
EXTERN_C HRESULT WINAPI CtfImeSetActiveContextAlways(_In_ HIMC hIMC, _In_ BOOL fActive, _In_ HWND hWnd, _In_ HKL hKL)
Definition: msctfime.cpp:775
#define WM_IME_SETCONTEXT
Definition: winuser.h:1857

Referenced by ImmAssociateContext(), ImmAssociateContextEx(), ImmSetActiveContextConsoleIME(), ImmWINNLSEnableIME(), and User32SetImeActivenessOfWindow().

◆ ImmSetActiveContextConsoleIME()

BOOL WINAPI ImmSetActiveContextConsoleIME ( _In_ HWND  hwnd,
_In_ BOOL  fFlag 
)

Definition at line 1281 of file imm.c.

1284{
1285 HIMC hIMC;
1286 TRACE("(%p, %d)\n", hwnd, fFlag);
1287
1288 hIMC = ImmGetContext(hwnd);
1289 if (IS_NULL_UNEXPECTEDLY(hIMC))
1290 return FALSE;
1291 return ImmSetActiveContext(hwnd, hIMC, fFlag);
1292}
HIMC WINAPI ImmGetContext(_In_ HWND hWnd)
Definition: imm.c:1066
BOOL WINAPI ImmSetActiveContext(_In_ HWND hWnd, _In_opt_ HIMC hIMC, _In_ BOOL fActive)
Definition: imm.c:1165
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023

Referenced by ConIme_OnDeactivate(), ConIme_OnSwitchIme(), and IntSetImeState().

◆ ImmSetHotKey()

BOOL WINAPI ImmSetHotKey ( _In_ DWORD  dwID,
_In_ UINT  uModifiers,
_In_ UINT  uVirtualKey,
_In_opt_ _When_((dwAction==SETIMEHOTKEY_ADD) &&!(IME_HOTKEY_DSWITCH_FIRST<=dwHotKeyId &&dwHotKeyId<=IME_HOTKEY_DSWITCH_LAST), _Null_) HKL  hKL 
)

◆ ImmSystemHandler()

LRESULT WINAPI ImmSystemHandler ( _In_ HIMC  hIMC,
_Inout_opt_ WPARAM  wParam,
_Inout_opt_ LPARAM  lParam 
)

Definition at line 844 of file keymsg.c.

848{
849 TRACE("(%p, %p, %p)\n", hIMC, wParam, lParam);
850
851 switch (wParam)
852 {
855 return 0;
856
859 return 0;
860
861 case IMS_SETLANGBAND:
864
865 default:
866 WARN("%p\n", wParam);
867 return 0;
868 }
869}
LRESULT CtfImmSetLangBand(_In_ HWND hWnd, _In_ BOOL fSet)
Definition: ctf.c:1234
#define IMS_SETLANGBAND
Definition: imm32_undoc.h:69
#define IMS_COMPLETECOMPSTR
Definition: imm32_undoc.h:67
#define IMS_UNSETLANGBAND
Definition: imm32_undoc.h:70
#define IMS_SENDNOTIFICATION
Definition: imm32_undoc.h:66
BOOL WINAPI ImmNotifyIME(_In_ HIMC hIMC, _In_ DWORD dwAction, _In_ DWORD dwIndex, _In_ DWORD_PTR dwValue)
Definition: ime.c:459
#define NI_COMPOSITIONSTR
Definition: immdev.h:363
BOOL Imm32SendNotification(BOOL bProcess)
Definition: keymsg.c:372

Referenced by ImeWnd_OnImeSystem().

◆ ImmUnlockClientImc()

VOID WINAPI ImmUnlockClientImc ( _Inout_ PCLIENTIMC  pClientImc)

Definition at line 1002 of file imm.c.

1003{
1004 LONG cLocks;
1005 HANDLE hInputContext;
1006
1007 TRACE("(%p)\n", pClientImc);
1008
1009 cLocks = InterlockedDecrement(&pClientImc->cLockObj);
1010 if (cLocks != 0 || !(pClientImc->dwFlags & CLIENTIMC_DESTROY))
1011 return;
1012
1013 hInputContext = pClientImc->hInputContext;
1014 if (hInputContext)
1015 LocalFree(hInputContext);
1016
1017 RtlDeleteCriticalSection(&pClientImc->cs);
1018 ImmLocalFree(pClientImc);
1019}
#define InterlockedDecrement
Definition: armddk.h:52
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
static LONG cLocks
Definition: compobj.c:119
NTSYSAPI NTSTATUS NTAPI RtlDeleteCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
long LONG
Definition: pedump.c:60

Referenced by CtfImmGenerateMessage(), CtfImmTIMCreateInputContext(), Imm32DestroyInputContext(), Imm32InternalLockIMC(), Imm32IsImcAnsi(), Imm32ProcessRequest(), Imm32SelectInputContext(), ImmGenerateMessage(), ImmGetAppCompatFlags(), ImmGetCandidateListAW(), ImmGetCandidateListCountAW(), ImmGetCompositionFontA(), ImmGetCompositionFontW(), ImmGetCompositionStringA(), ImmGetCompositionStringW(), ImmGetGuideLineAW(), ImmGetIMCLockCount(), ImmGetSaveContext(), ImmPostMessages(), ImmSetActiveContext(), ImmSetCompositionFontA(), ImmSetCompositionFontW(), ImmUnlockIMC(), ImmWINNLSEnableIME(), and START_TEST().

◆ ImmUnlockImeDpi()

VOID WINAPI ImmUnlockImeDpi ( _Inout_opt_ PIMEDPI  pImeDpi)

Definition at line 562 of file ime.c.

564{
565 PIMEDPI *ppEntry;
566
567 TRACE("(%p)\n", pImeDpi);
568
569 if (pImeDpi == NULL)
570 return;
571
573
574 /* unlock */
575 --(pImeDpi->cLockObj);
576 if (pImeDpi->cLockObj != 0)
577 {
579 return;
580 }
581
582 if ((pImeDpi->dwFlags & IMEDPI_FLAG_UNLOADED) == 0)
583 {
584 if ((pImeDpi->dwFlags & IMEDPI_FLAG_LOCKED) == 0 ||
585 (pImeDpi->ImeInfo.fdwProperty & IME_PROP_END_UNLOAD) == 0)
586 {
588 return;
589 }
590 }
591
592 /* Remove from list */
593 for (ppEntry = &gpImeDpiList; *ppEntry; ppEntry = &((*ppEntry)->pNext))
594 {
595 if (*ppEntry == pImeDpi) /* found */
596 {
597 *ppEntry = pImeDpi->pNext;
598 break;
599 }
600 }
601
602 Imm32FreeIME(pImeDpi, TRUE);
603 ImmLocalFree(pImeDpi);
604
606}
VOID Imm32FreeIME(PIMEDPI pImeDpi, BOOL bDestroy)
Definition: ime.c:35
#define IMEDPI_FLAG_LOCKED
Definition: imm32_undoc.h:153
#define IME_PROP_END_UNLOAD
Definition: immdev.h:344

Referenced by CtfImmGetGuidAtom(), CtfImmIsGuidMapEnable(), Imm32CreateInputContext(), Imm32DestroyInputContext(), Imm32MakeIMENotify(), Imm32ProcessHotKey(), Imm32SelectInputContext(), ImmActivateLayout(), ImmCallImeConsoleIME(), ImmConfigureIMEA(), ImmConfigureIMEW(), ImmCreateSoftKeyboard(), ImmEnumRegisterWordA(), ImmEnumRegisterWordW(), ImmEscapeA(), ImmEscapeW(), ImmGetConversionListA(), ImmGetConversionListW(), ImmGetImeMenuItemsAW(), ImmGetProperty(), ImmGetRegisterWordStyleA(), ImmGetRegisterWordStyleW(), ImmNotifyIME(), ImmProcessKey(), ImmRegisterWordA(), ImmRegisterWordW(), ImmSetActiveContext(), ImmSetCompositionStringAW(), ImmTranslateMessage(), ImmUnregisterWordA(), ImmUnregisterWordW(), and User32CreateImeUIWindow().

◆ ImmWINNLSEnableIME()

BOOL WINAPI ImmWINNLSEnableIME ( _In_opt_ HWND  hWnd,
_In_ BOOL  enable 
)

Definition at line 1718 of file ime.c.

1721{
1722 HIMC hIMC;
1723 PCLIENTIMC pClientImc;
1724 HWND hImeWnd;
1725 BOOL bImeWnd, ret;
1726
1727 TRACE("(%p, %d)\n", hWnd, enable);
1728
1730 {
1732 return FALSE;
1733 }
1734
1736 if (IS_NULL_UNEXPECTEDLY(hIMC))
1737 return FALSE;
1738
1739 pClientImc = ImmLockClientImc(hIMC);
1740 if (IS_NULL_UNEXPECTEDLY(pClientImc))
1741 return FALSE;
1742
1743 ret = !(pClientImc->dwFlags & CLIENTIMC_DISABLEIME);
1744 if (!!enable == ret)
1745 {
1746 TRACE("Same\n");
1747 ImmUnlockClientImc(pClientImc);
1748 return ret;
1749 }
1750
1751 if (!IsWindow(hWnd))
1752 hWnd = GetFocus();
1753
1754 hImeWnd = ImmGetDefaultIMEWnd(hWnd);
1755 bImeWnd = IsWindow(hImeWnd);
1756 if (bImeWnd)
1758
1759 if (enable)
1760 pClientImc->dwFlags &= ~CLIENTIMC_DISABLEIME;
1761 else
1762 pClientImc->dwFlags |= CLIENTIMC_DISABLEIME;
1763
1764 ImmUnlockClientImc(pClientImc);
1765
1766 if (bImeWnd)
1767 ImmSetActiveContext(hWnd, (enable ? hIMC : NULL), TRUE);
1768
1769 return ret;
1770}
GLboolean enable
Definition: glext.h:11120
HWND WINAPI ImmGetDefaultIMEWnd(_In_opt_ HWND hWnd)
Definition: ime.c:441
#define CLIENTIMC_DISABLEIME
Definition: imm32_undoc.h:186
BOOL WINAPI ImmSetActiveContext(_In_ HWND hwnd, _In_opt_ HIMC hIMC, _In_ BOOL fFlag)
Definition: imm.c:1165
@ THREADSTATE_DEFAULTINPUTCONTEXT
Definition: ntuser.h:2493

Referenced by IntInitializeImmEntryTable(), User32InitializeImmEntryTable(), and WINNLSEnableIME().

◆ ImmWINNLSGetEnableStatus()

BOOL WINAPI ImmWINNLSGetEnableStatus ( _In_opt_ HWND  hWnd)

Definition at line 1266 of file imm.c.

1267{
1269 {
1271 return FALSE;
1272 }
1273
1274 return !!ImmGetSaveContext(hWnd, 2);
1275}

Referenced by WINNLSGetEnableStatus().