ReactOS 0.4.16-dev-1948-gd260c1d
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  tagIMEINFOEX
 
struct  IMEDPI
 
struct  tagCLIENTIMC
 
struct  INPUTCONTEXTDX
 
struct  IME_SUBSTATE
 
struct  IME_STATE
 
struct  tagUNDETERMINESTRUCT
 

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 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_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_UNKNOWN4   0x20
 
#define CLIENTIMC_DESTROY   0x40
 
#define CLIENTIMC_DISABLEIME   0x80
 
#define CLIENTIMC_UNKNOWN2   0x100
 
#define ImmIMPGetIME   ImmIMPGetIMEA
 
#define ImmIMPQueryIME   ImmIMPQueryIMEA
 
#define ImmIMPSetIME   ImmIMPSetIMEA
 
#define ImmSendIMEMessageEx   ImmSendIMEMessageExA
 

Typedefs

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
 
typedef struct tagUNDETERMINESTRUCT UNDETERMINESTRUCT
 
typedef struct tagUNDETERMINESTRUCTPUNDETERMINESTRUCT
 
typedef struct tagUNDETERMINESTRUCTLPUNDETERMINESTRUCT
 

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)
 
LRESULT 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 ImmWINNLSEnableIME (_In_opt_ HWND hWnd, _In_ BOOL enable)
 
LRESULT WINAPI ImmSystemHandler (_In_ HIMC hIMC, _Inout_opt_ WPARAM wParam, _Inout_opt_ LPARAM lParam)
 
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)
 
WORD WINAPI ImmSendIMEMessageExA (_In_ HWND hWnd, _In_ LPARAM lParam)
 
WORD 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)
 
LRESULT WINAPI CtfImmDispatchDefImeMessage (_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
 

Macro Definition Documentation

◆ CLIENTIMC_ACTIVE

#define CLIENTIMC_ACTIVE   0x2

Definition at line 170 of file imm32_undoc.h.

◆ CLIENTIMC_DESTROY

#define CLIENTIMC_DESTROY   0x40

Definition at line 172 of file imm32_undoc.h.

◆ CLIENTIMC_DISABLEIME

#define CLIENTIMC_DISABLEIME   0x80

Definition at line 173 of file imm32_undoc.h.

◆ CLIENTIMC_UNKNOWN2

#define CLIENTIMC_UNKNOWN2   0x100

Definition at line 174 of file imm32_undoc.h.

◆ CLIENTIMC_UNKNOWN4

#define CLIENTIMC_UNKNOWN4   0x20

Definition at line 171 of file imm32_undoc.h.

◆ CLIENTIMC_WIDE

#define CLIENTIMC_WIDE   0x1

Definition at line 169 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 99 of file imm32_undoc.h.

◆ DEFINE_IME_ENTRY [2/2]

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

Definition at line 99 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 139 of file imm32_undoc.h.

◆ IMEDPI_FLAG_UNLOADED

#define IMEDPI_FLAG_UNLOADED   0x1

Definition at line 138 of file imm32_undoc.h.

◆ ImmIMPGetIME

#define ImmIMPGetIME   ImmIMPGetIMEA

Definition at line 322 of file imm32_undoc.h.

◆ ImmIMPQueryIME

#define ImmIMPQueryIME   ImmIMPQueryIMEA

Definition at line 323 of file imm32_undoc.h.

◆ ImmIMPSetIME

#define ImmIMPSetIME   ImmIMPSetIMEA

Definition at line 324 of file imm32_undoc.h.

◆ ImmSendIMEMessageEx

#define ImmSendIMEMessageEx   ImmSendIMEMessageExA

Definition at line 325 of file imm32_undoc.h.

◆ IMS_ACTIVATELAYOUT

#define IMS_ACTIVATELAYOUT   0x19

Definition at line 48 of file imm32_undoc.h.

◆ IMS_COMPLETECOMPSTR

#define IMS_COMPLETECOMPSTR   0x20

Definition at line 53 of file imm32_undoc.h.

◆ IMS_CONFIGURE

#define IMS_CONFIGURE   0x0D

Definition at line 40 of file imm32_undoc.h.

◆ IMS_FREELAYOUT

#define IMS_FREELAYOUT   0x11

Definition at line 42 of file imm32_undoc.h.

◆ IMS_GETCONTEXT

#define IMS_GETCONTEXT   0x1E

Definition at line 51 of file imm32_undoc.h.

◆ IMS_GETCONVSTATUS

#define IMS_GETCONVSTATUS   0x14

Definition at line 44 of file imm32_undoc.h.

◆ IMS_GETIMEMENU

#define IMS_GETIMEMENU   0x1C

Definition at line 49 of file imm32_undoc.h.

◆ IMS_IMEACTIVATE

#define IMS_IMEACTIVATE   0x17

Definition at line 46 of file imm32_undoc.h.

◆ IMS_IMEDEACTIVATE

#define IMS_IMEDEACTIVATE   0x18

Definition at line 47 of file imm32_undoc.h.

◆ IMS_IMEHELP

#define IMS_IMEHELP   0x15

Definition at line 45 of file imm32_undoc.h.

◆ IMS_IMEMENUITEMSELECTED

#define IMS_IMEMENUITEMSELECTED   0x1D

Definition at line 50 of file imm32_undoc.h.

◆ IMS_LOADTHREADLAYOUT

#define IMS_LOADTHREADLAYOUT   0x21

Definition at line 54 of file imm32_undoc.h.

◆ IMS_NOTIFYIMESHOW

#define IMS_NOTIFYIMESHOW   0x05

Definition at line 35 of file imm32_undoc.h.

◆ IMS_SENDNOTIFICATION

#define IMS_SENDNOTIFICATION   0x1F

Definition at line 52 of file imm32_undoc.h.

◆ IMS_SETCANDFORM

#define IMS_SETCANDFORM   0x09

Definition at line 37 of file imm32_undoc.h.

◆ IMS_SETCOMPFONT

#define IMS_SETCOMPFONT   0x0A

Definition at line 38 of file imm32_undoc.h.

◆ IMS_SETCOMPFORM

#define IMS_SETCOMPFORM   0x0B

Definition at line 39 of file imm32_undoc.h.

◆ IMS_SETLANGBAND

#define IMS_SETLANGBAND   0x23

Definition at line 55 of file imm32_undoc.h.

◆ IMS_SETOPENSTATUS

#define IMS_SETOPENSTATUS   0x0F

Definition at line 41 of file imm32_undoc.h.

◆ IMS_SOFTKBDONOFF

#define IMS_SOFTKBDONOFF   0x13

Definition at line 43 of file imm32_undoc.h.

◆ IMS_UNSETLANGBAND

#define IMS_UNSETLANGBAND   0x24

Definition at line 56 of file imm32_undoc.h.

◆ IMS_UPDATEIMEUI

#define IMS_UPDATEIMEUI   0x06

Definition at line 36 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

◆ IME_STATE

◆ IME_SUBSTATE

◆ IMEDPI

typedef struct IMEDPI IMEDPI

◆ IMEINFOEX

◆ IMEINFOEXCLASS

◆ INPUTCONTEXTDX

◆ LPCLIENTIMC

◆ LPIME_STATE

◆ LPIMEDPI

◆ LPIMEINFOEX

◆ LPINPUTCONTEXTDX

◆ LPUNDETERMINESTRUCT

◆ NPCLIENTIMC

◆ NPIME_STATE

◆ NPIME_SUBSTATE

◆ NPIMEDPI

◆ NPIMEINFOEX

◆ NPINPUTCONTEXTDX

◆ PCLIENTIMC

◆ PIME_STATE

◆ PIME_SUBSTATE

◆ PIMEDPI

typedef struct IMEDPI * PIMEDPI

◆ PIMEINFOEX

◆ PINPUTCONTEXTDX

◆ PUNDETERMINESTRUCT

◆ UNDETERMINESTRUCT

Enumeration Type Documentation

◆ IMEINFOEXCLASS

Enumerator
ImeInfoExKeyboardLayout 
ImeInfoExKeyboardLayoutTFS 
ImeInfoExImeWindow 
ImeInfoExImeFileName 

Definition at line 77 of file imm32_undoc.h.

78{
IMEINFOEXCLASS
Definition: imm32_undoc.h:78
@ ImeInfoExImeFileName
Definition: imm32_undoc.h:82
@ ImeInfoExKeyboardLayoutTFS
Definition: imm32_undoc.h:80
@ ImeInfoExKeyboardLayout
Definition: imm32_undoc.h:79
@ ImeInfoExImeWindow
Definition: imm32_undoc.h:81

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
BOOL WINAPI ImmEnumInputContext(_In_ DWORD dwThreadId, _In_ IMCENUMPROC lpfn, _In_ LPARAM lParam)
Definition: imm.c:1123
#define CI_AIMMACTIVATED
Definition: ntuser.h:311
#define GetWin32ClientInfo()
Definition: ntuser.h:352
#define S_OK
Definition: intsafe.h:52
HRESULT hr
Definition: shlfolder.c:183
#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:429
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
NTSYSAPI BOOLEAN WINAPI RtlDllShutdownInProgress(void)
Definition: ldrapi.c:1559
EXTERN_C LRESULT WINAPI CtfImeDispatchDefImeMessage(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
Definition: msctfime.cpp:832

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:954
VOID WINAPI ImmUnlockClientImc(_Inout_ PCLIENTIMC pClientImc)
Definition: imm.c:1001
#define CLIENTIMC_WIDE
Definition: imm32_undoc.h:169
BOOL WINAPI ImmUnlockIMCC(_In_ HIMCC imcc)
Definition: utils.c:615
LPINPUTCONTEXT WINAPI ImmLockIMC(_In_ HIMC hIMC)
Definition: imm.c:1079
struct _tagINPUTCONTEXT * LPINPUTCONTEXT
BOOL WINAPI ImmUnlockIMC(_In_ HIMC hIMC)
Definition: imm.c:1089
struct _tagTRANSMSG * PTRANSMSG
LPVOID WINAPI ImmLockIMCC(_In_ HIMCC imcc)
Definition: utils.c:604
DWORD_PTR NTAPI NtUserQueryInputContext(HIMC hIMC, DWORD dwType)
Definition: ime.c:1885
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:404
#define ImmLocalFree(lpData)
Definition: precomp.h:105
#define IS_NULL_UNEXPECTEDLY(p)
Definition: precomp.h:66
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().

◆ 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:1525

◆ 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:611
#define IS_IME_HKL(hKL)
Definition: imm32_undoc.h:21
#define CI_CTFTIM
Definition: ntuser.h:308
#define IS_16BIT_MODE()
Definition: ntuser.h:1214
#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 1287 of file imm.c.

1288{
1289 WCHAR szText[8];
1290 static LANGID s_wKeyboardLangIdCache = 0;
1291 static UINT s_uKeyboardLayoutCPCache = 0;
1292
1293 TRACE("(%u)\n", wLangId);
1294
1295 if (wLangId == s_wKeyboardLangIdCache)
1296 return s_uKeyboardLayoutCPCache;
1297
1298 if (!GetLocaleInfoW(wLangId, LOCALE_IDEFAULTANSICODEPAGE, szText, _countof(szText)))
1299 return 0;
1300
1301 s_wKeyboardLangIdCache = wLangId;
1302 szText[_countof(szText) - 1] = UNICODE_NULL; /* Avoid buffer overrun */
1303 s_uKeyboardLayoutCPCache = wcstol(szText, NULL, 10);
1304 return s_uKeyboardLayoutCPCache;
1305}
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: locale.c:1675
USHORT LANGID
Definition: mui.h:9
#define UNICODE_NULL
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
#define _countof(array)
Definition: sndvol32.h:70
#define LOCALE_IDEFAULTANSICODEPAGE
Definition: winnls.h:45
__wchar_t WCHAR
Definition: xmlstorage.h:180

◆ 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:531
VOID WINAPI ImmUnlockImeDpi(_Inout_opt_ PIMEDPI pImeDpi)
Definition: ime.c:561
#define CPS_CANCEL
Definition: imm.h:181
#define CPS_COMPLETE
Definition: imm.h:178
HWND WINAPI ImmGetDefaultIMEWnd(_In_opt_ HWND hWnd)
Definition: ime.c:440
#define IME_PROP_COMPLETE_ON_UNSELECT
Definition: imm.h:250
DWORD NTAPI NtUserSetThreadLayoutHandles(_In_ HKL hNewKL, _In_ HKL hOldKL)
Definition: ime.c:542
#define CI_IMMACTIVATE
Definition: ntuser.h:306
UINT_PTR HKL
Definition: msctf.idl:125
IMEINFO ImeInfo
Definition: imm32_undoc.h:94
HKL hNewKL
Definition: imm.c:429
HKL hOldKL
Definition: imm.c:430
DWORD fdwProperty
Definition: immdev.h:22
BOOL WINAPI IsWindow(_In_opt_ HWND)
HKL WINAPI GetKeyboardLayout(_In_ DWORD)
#define WM_IME_SELECT
Definition: winuser.h:1861

Referenced by ImeWnd_OnImeSystem().

◆ 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:16
PIMEDPI gpImeDpiList
Definition: ime.c:17
BOOL Imm32ReleaseIME(_In_ HKL hKL)
Definition: ime.c:378
#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:93
struct IMEDPI * pNext
Definition: imm32_undoc.h:91
_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 PCLIENTIMC pClientIMC;
726
727 TRACE("(%p)\n", hIMC);
728
729 pClientIMC = ImmLockClientImc(hIMC);
730 if (IS_NULL_UNEXPECTEDLY(pClientIMC))
731 return 0;
732
733 dwFlags = pClientIMC->dwCompatFlags;
734 ImmUnlockClientImc(pClientIMC);
735 return (dwFlags | g_aimm_compat_flags);
736}
DWORD dwCompatFlags
Definition: imm32_undoc.h:150

Referenced by ImmProcessKey().

◆ 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 611 of file ime.c.

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

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
unsigned char * LPBYTE
Definition: typedefs.h:53
BOOL Imm32LoadImeVerInfo(_Inout_ PIMEINFOEX pImeInfoEx)
Definition: install.c:418
#define REGKEY_KEYBOARD_LAYOUTS
Definition: precomp.h:85
#define IS_ERROR_UNEXPECTEDLY(x)
Definition: precomp.h:69
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by Imm32LoadCtfIme(), and User32CallImmLoadLayoutFromKernel().

◆ ImmLockClientImc()

PCLIENTIMC WINAPI ImmLockClientImc ( _In_ HIMC  hImc)

Definition at line 954 of file imm.c.

955{
956 PIMC pIMC;
957 PCLIENTIMC pClientImc;
958
959 TRACE("(%p)\n", hImc);
960
961 if (IS_NULL_UNEXPECTEDLY(hImc))
962 return NULL;
963
964 pIMC = ValidateHandle(hImc, TYPE_INPUTCONTEXT);
965 if (!pIMC || !Imm32CheckImcProcess(pIMC))
966 return NULL;
967
968 pClientImc = (PCLIENTIMC)pIMC->dwClientImcData;
969 if (pClientImc)
970 {
971 if (pClientImc->dwFlags & CLIENTIMC_DESTROY)
972 return NULL;
973 goto Finish;
974 }
975
976 pClientImc = ImmLocalAlloc(HEAP_ZERO_MEMORY, sizeof(CLIENTIMC));
977 if (IS_NULL_UNEXPECTEDLY(pClientImc))
978 return NULL;
979
980 RtlInitializeCriticalSection(&pClientImc->cs);
982
984 {
985 ERR("\n");
986 ImmLocalFree(pClientImc);
987 return NULL;
988 }
989
990 pClientImc->dwFlags |= CLIENTIMC_UNKNOWN2;
991
992Finish:
993 InterlockedIncrement(&pClientImc->cLockObj);
994 return pClientImc;
995}
#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_DESTROY
Definition: imm32_undoc.h:172
#define CLIENTIMC_UNKNOWN2
Definition: imm32_undoc.h:174
@ THREADSTATE_IMECOMPATFLAGS
Definition: ntuser.h:2502
@ TYPE_INPUTCONTEXT
Definition: ntuser.h:57
BOOL NTAPI NtUserUpdateInputContext(HIMC hIMC, DWORD dwType, DWORD_PTR dwValue)
Definition: ime.c:1853
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)
#define DWORD
Definition: nt_native.h:44
RTL_CRITICAL_SECTION cs
Definition: imm32_undoc.h:151
Definition: ntuser.h:199
ULONG_PTR dwClientImcData
Definition: ntuser.h:202
@ UIC_CLIENTIMCDATA
Definition: undocuser.h:314
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 531 of file ime.c.

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

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 743 of file keymsg.c.

749{
750 DWORD ret = 0;
751 HIMC hIMC;
752 PIMEDPI pImeDpi;
754 BYTE KeyState[256];
755 BOOL bLowWordOnly = FALSE, bSkipThisKey = FALSE, bHotKeyDone = TRUE;
756
757 TRACE("(%p, %p, 0x%X, %p, 0x%lX)\n", hWnd, hKL, vKey, lParam, dwHotKeyID);
758
759 /* Process the key by the IME */
760 hIMC = ImmGetContext(hWnd);
761 pImeDpi = ImmLockImeDpi(hKL);
762 if (pImeDpi)
763 {
764 pIC = (LPINPUTCONTEXTDX)ImmLockIMC(hIMC);
765 if (pIC)
766 {
767 if ((LOBYTE(vKey) == VK_PACKET) &&
769 {
770 if (ImeDpi_IsUnicode(pImeDpi))
771 {
772 bLowWordOnly = TRUE;
773 }
774 else
775 {
776 if (pIC->fOpen)
778
779 bSkipThisKey = TRUE;
780 }
781 }
782
783 if (!bSkipThisKey && GetKeyboardState(KeyState))
784 {
785 UINT vk = (bLowWordOnly ? LOWORD(vKey) : vKey);
786 if (pImeDpi->ImeProcessKey(hIMC, vk, lParam, KeyState))
787 {
788 pIC->bNeedsTrans = TRUE;
789 pIC->nVKey = vKey;
791 }
792 }
793
794 ImmUnlockIMC(hIMC);
795 }
796
797 ImmUnlockImeDpi(pImeDpi);
798 }
799
800 /* Process the hot-key if necessary */
801 if (!CtfImmIsCiceroStartedInThread()) /* Not Cicero? */
802 {
803 /* Process IMM IME hotkey */
804 if ((dwHotKeyID == INVALID_HOTKEY_ID) || !Imm32ProcessHotKey(hWnd, hIMC, hKL, dwHotKeyID))
805 bHotKeyDone = FALSE;
806 }
807 else if (!CtfImeProcessCicHotkey(hIMC, vKey, lParam)) /* CTF IME not processed the hotkey? */
808 {
809 /* Process IMM IME hotkey */
810 if (!IS_IME_HKL(hKL) ||
811 ((dwHotKeyID == INVALID_HOTKEY_ID) || !Imm32ProcessHotKey(hWnd, hIMC, hKL, dwHotKeyID)))
812 {
813 bHotKeyDone = FALSE;
814 }
815 }
816
817 if (bHotKeyDone && ((vKey != VK_KANJI) || (dwHotKeyID != IME_JHOTKEY_CLOSE_OPEN)))
818 ret |= IPHK_HOTKEY;
819
820 if ((ret & IPHK_PROCESSBYIME) && (ImmGetAppCompatFlags(hIMC) & 0x10000))
821 {
822 /* The key has been processed by IME's ImeProcessKey */
824 if ((PRIMARYLANGID(wLangID) == LANG_KOREAN) &&
825 ((vKey == VK_PROCESSKEY) || (ret & IPHK_HOTKEY)))
826 {
827 /* Korean don't want VK_PROCESSKEY and IME hot-keys */
828 }
829 else
830 {
831 /* Add WM_KEYDOWN:VK_PROCESSKEY message */
833
834 ret &= ~IPHK_PROCESSBYIME;
836 }
837 }
838
839 ImmReleaseContext(hWnd, hIMC);
840 return ret; /* Returns IPHK_... flags */
841}
DWORD HIMC
Definition: dimm.idl:75
return ret
Definition: mutex.c:146
BOOL WINAPI CtfImmIsCiceroStartedInThread(VOID)
Definition: ctf.c:781
struct INPUTCONTEXTDX * LPINPUTCONTEXTDX
#define IME_JHOTKEY_CLOSE_OPEN
Definition: imm.h:200
HIMC WINAPI ImmGetContext(_In_ HWND hWnd)
Definition: imm.c:1065
BOOL WINAPI ImmReleaseContext(_In_ HWND hWnd, _In_ HIMC hIMC)
Definition: imm.c:1109
#define IME_PROP_ACCEPT_WIDE_VKEY
Definition: immdev.h:367
#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:1020
WORD vk
Definition: input.c:77
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 INVALID_HOTKEY_ID
Definition: precomp.h:77
#define ImeDpi_IsUnicode(pImeDpi)
Definition: precomp.h:120
#define VK_PROCESSKEY
Definition: winuser.h:2363
_Check_return_ BOOL WINAPI GetKeyboardState(_Out_writes_(256) PBYTE lpKeyState)
#define VK_KANJI
Definition: winuser.h:2249
#define WM_KEYDOWN
Definition: winuser.h:1743
unsigned char BYTE
Definition: xxhash.c:193

Referenced by ImmCallImeConsoleIME(), and User32CallImmProcessKeyFromKernel().

◆ ImmPutImeMenuItemsIntoMappedFile()

LRESULT WINAPI ImmPutImeMenuItemsIntoMappedFile ( _In_ HIMC  hIMC)

Definition at line 377 of file imemenu.c.

378{
379 /* Open the existing file mapping */
380 HANDLE hMapping = OpenFileMappingW(FILE_MAP_ALL_ACCESS, FALSE, L"ImmMenuInfo");
381 if (!hMapping)
382 {
383 ERR("!hMapping\n");
384 return 0;
385 }
386
387 /* Map the view */
388 PIMEMENUINFO pView = MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
389 if (!pView)
390 {
391 ERR("!pView\n");
392 CloseHandle(hMapping);
393 return 0;
394 }
395
396 /* Get parent menu info */
397 PVOID lpImeParentMenu = NULL;
398 if (pView->dwParentOffset)
399 lpImeParentMenu = PTR_FROM_OFFSET(pView, pView->dwParentOffset);
400
401 /* Serialize the IME menu */
402 DWORD dwItemCount = Imm32SerializeImeMenu(pView, hIMC, lpImeParentMenu, !pView->dwItemCount);
403
404 /* Clean up */
405 UnmapViewOfFile(pView);
406 CloseHandle(hMapping);
407
408 return dwItemCount;
409}
#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
DWORD dwItemCount
Definition: imemenu.c:27
DWORD dwParentOffset
Definition: imemenu.c:28
#define PTR_FROM_OFFSET(head, offset)
Definition: imemenu.c:47
static DWORD Imm32SerializeImeMenu(_Inout_ PIMEMENUINFO pView, _In_ HIMC hIMC, _Inout_opt_ PIMEMENUITEMINFOW lpImeParentMenu, _In_ BOOL bCountOnly)
Definition: imemenu.c:234
#define FILE_MAP_ALL_ACCESS
Definition: winbase.h:158

Referenced by ImeWnd_OnImeSystem().

◆ ImmSendIMEMessageExA()

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

Definition at line 215 of file win3.c.

218{
219 FIXME("(%p, %p)\n", hWnd, lParam);
220 return 0;
221}
#define FIXME(fmt,...)
Definition: precomp.h:53

Referenced by SendIMEMessageExA().

◆ ImmSendIMEMessageExW()

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

Definition at line 227 of file win3.c.

230{
231 FIXME("(%p, %p)\n", hWnd, lParam);
232 return 0;
233}

Referenced by SendIMEMessageExW().

◆ ImmSetActiveContext()

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

Definition at line 1155 of file imm.c.

1159{
1160 PCLIENTIMC pClientImc;
1161 LPINPUTCONTEXTDX pIC;
1162 PIMEDPI pImeDpi;
1163 HIMC hOldIMC;
1164 HKL hKL;
1165 BOOL fOpen = FALSE;
1166 DWORD dwConversion = 0, dwShowFlags = ISC_SHOWUIALL;
1167 HWND hwndDefIME;
1168
1169 TRACE("(%p, %p, %d)\n", hWnd, hIMC, fActive);
1170
1171 if (!IS_IMM_MODE())
1172 {
1173 TRACE("\n");
1174 return FALSE;
1175 }
1176
1177 pClientImc = ImmLockClientImc(hIMC);
1178
1179 if (!fActive)
1180 {
1181 if (pClientImc)
1182 pClientImc->dwFlags &= ~CLIENTIMC_ACTIVE;
1183 }
1184 else if (hIMC)
1185 {
1186 if (IS_NULL_UNEXPECTEDLY(pClientImc))
1187 return FALSE;
1188
1189 pIC = (LPINPUTCONTEXTDX)ImmLockIMC(hIMC);
1190 if (IS_NULL_UNEXPECTEDLY(pIC))
1191 {
1192 ImmUnlockClientImc(pClientImc);
1193 return FALSE;
1194 }
1195
1196 pIC->hWnd = hWnd;
1197 pClientImc->dwFlags |= CLIENTIMC_ACTIVE;
1198
1199 if (pIC->dwUIFlags & 2)
1201
1202 fOpen = pIC->fOpen;
1203 dwConversion = pIC->fdwConversion;
1204
1205 ImmUnlockIMC(hIMC);
1206 }
1207 else
1208 {
1209 hOldIMC = ImmGetSaveContext(hWnd, 1);
1210 pIC = (LPINPUTCONTEXTDX)ImmLockIMC(hOldIMC);
1211 if (pIC)
1212 {
1213 pIC->hWnd = hWnd;
1214 ImmUnlockIMC(hOldIMC);
1215 }
1216 }
1217
1218 hKL = GetKeyboardLayout(0);
1219 if (IS_CICERO_MODE() && !IS_16BIT_MODE())
1220 {
1221 CtfImeSetActiveContextAlways(hIMC, fActive, hWnd, hKL);
1222 hKL = GetKeyboardLayout(0);
1223 }
1224
1225 pImeDpi = ImmLockImeDpi(hKL);
1226 if (pImeDpi)
1227 {
1228 if (IS_IME_HKL(hKL))
1229 pImeDpi->ImeSetActiveContext(hIMC, fActive);
1230 ImmUnlockImeDpi(pImeDpi);
1231 }
1232
1233 if (IsWindow(hWnd))
1234 {
1235 SendMessageW(hWnd, WM_IME_SETCONTEXT, fActive, dwShowFlags);
1236 if (fActive)
1237 NtUserNotifyIMEStatus(hWnd, fOpen, dwConversion);
1238 }
1239 else if (!fActive)
1240 {
1241 hwndDefIME = ImmGetDefaultIMEWnd(NULL);
1242 if (hwndDefIME)
1243 SendMessageW(hwndDefIME, WM_IME_SETCONTEXT, 0, dwShowFlags);
1244 }
1245
1246 if (pClientImc)
1247 ImmUnlockClientImc(pClientImc);
1248
1249 return TRUE;
1250}
LPINPUTCONTEXT WINAPI ImmLockIMC(_In_ HIMC hIMC)
Definition: imm.c:1079
PCLIENTIMC WINAPI ImmLockClientImc(_In_ HIMC hImc)
Definition: imm.c:954
static HIMC ImmGetSaveContext(_In_opt_ HWND hWnd, _In_ DWORD dwContextFlags)
Definition: imm.c:1021
BOOL WINAPI ImmUnlockIMC(_In_ HIMC hIMC)
Definition: imm.c:1089
VOID WINAPI ImmUnlockClientImc(_Inout_ PCLIENTIMC pClientImc)
Definition: imm.c:1001
#define CLIENTIMC_ACTIVE
Definition: imm32_undoc.h:170
#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:855
#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 1271 of file imm.c.

1274{
1275 HIMC hIMC;
1276 TRACE("(%p, %d)\n", hwnd, fFlag);
1277
1278 hIMC = ImmGetContext(hwnd);
1279 if (IS_NULL_UNEXPECTEDLY(hIMC))
1280 return FALSE;
1281 return ImmSetActiveContext(hwnd, hIMC, fFlag);
1282}
HIMC WINAPI ImmGetContext(_In_ HWND hWnd)
Definition: imm.c:1065
BOOL WINAPI ImmSetActiveContext(_In_ HWND hWnd, _In_opt_ HIMC hIMC, _In_ BOOL fActive)
Definition: imm.c:1155
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023

◆ ImmSystemHandler()

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

Definition at line 847 of file keymsg.c.

851{
852 TRACE("(%p, %p, %p)\n", hIMC, wParam, lParam);
853
854 switch (wParam)
855 {
858 return 0;
859
862 return 0;
863
864 case IMS_SETLANGBAND:
867
868 default:
869 WARN("%p\n", wParam);
870 return 0;
871 }
872}
LRESULT CtfImmSetLangBand(_In_ HWND hWnd, _In_ BOOL fSet)
Definition: ctf.c:1234
#define IMS_SETLANGBAND
Definition: imm32_undoc.h:55
#define IMS_COMPLETECOMPSTR
Definition: imm32_undoc.h:53
#define IMS_UNSETLANGBAND
Definition: imm32_undoc.h:56
#define IMS_SENDNOTIFICATION
Definition: imm32_undoc.h:52
BOOL WINAPI ImmNotifyIME(_In_ HIMC hIMC, _In_ DWORD dwAction, _In_ DWORD dwIndex, _In_ DWORD_PTR dwValue)
Definition: ime.c:458
#define NI_COMPOSITIONSTR
Definition: immdev.h:381
BOOL Imm32SendNotification(BOOL bProcess)
Definition: keymsg.c:372

Referenced by ImeWnd_OnImeSystem().

◆ ImmUnlockClientImc()

VOID WINAPI ImmUnlockClientImc ( _Inout_ PCLIENTIMC  pClientImc)

Definition at line 1001 of file imm.c.

1002{
1003 LONG cLocks;
1004 HANDLE hInputContext;
1005
1006 TRACE("(%p)\n", pClientImc);
1007
1008 cLocks = InterlockedDecrement(&pClientImc->cLockObj);
1009 if (cLocks != 0 || !(pClientImc->dwFlags & CLIENTIMC_DESTROY))
1010 return;
1011
1012 hInputContext = pClientImc->hInputContext;
1013 if (hInputContext)
1014 LocalFree(hInputContext);
1015
1016 RtlDeleteCriticalSection(&pClientImc->cs);
1017 ImmLocalFree(pClientImc);
1018}
#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 561 of file ime.c.

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

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 1717 of file ime.c.

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

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

◆ ImmWINNLSGetEnableStatus()

BOOL WINAPI ImmWINNLSGetEnableStatus ( _In_opt_ HWND  hWnd)

Definition at line 1256 of file imm.c.

1257{
1259 {
1261 return FALSE;
1262 }
1263
1264 return !!ImmGetSaveContext(hWnd, 2);
1265}

Referenced by WINNLSGetEnableStatus().