19#define WIN32_NO_STATUS
49#define ERR_PRINTF(fmt, ...) (__WINE_IS_DEBUG_ON(_ERR, __wine_dbch___default) ? \
50 (wine_dbg_printf("err:(%s:%d) " fmt, __RELFILE__, __LINE__, ##__VA_ARGS__), TRUE) : TRUE)
54 #define FAILED_UNEXPECTEDLY(hr) \
55 (FAILED(hr) ? ERR_PRINTF("FAILED(0x%08X)\n", hr) : FALSE)
56 #define IS_NULL_UNEXPECTEDLY(p) \
57 (!(p) ? ERR_PRINTF("%s was NULL\n", #p) : FALSE)
58 #define IS_ZERO_UNEXPECTEDLY(p) \
59 (!(p) ? ERR_PRINTF("%s was zero\n", #p) : FALSE)
60 #define IS_TRUE_UNEXPECTEDLY(x) \
61 ((x) ? ERR_PRINTF("%s was non-zero\n", #x) : FALSE)
62 #define IS_ERROR_UNEXPECTEDLY(x) \
63 ((x) != ERROR_SUCCESS ? ERR_PRINTF("%s was %d\n", #x, (int)(x)) : FALSE)
65 #define FAILED_UNEXPECTEDLY(hr) FAILED(hr)
66 #define IS_NULL_UNEXPECTEDLY(p) (!(p))
67 #define IS_ZERO_UNEXPECTEDLY(p) (!(p))
68 #define IS_TRUE_UNEXPECTEDLY(x) (x)
69 #define IS_ERROR_UNEXPECTEDLY(x) ((x) != ERROR_SUCCESS)
72#define IS_CROSS_THREAD_HIMC(hIMC) IS_TRUE_UNEXPECTEDLY(Imm32IsCrossThreadAccess(hIMC))
73#define IS_CROSS_PROCESS_HWND(hWnd) IS_TRUE_UNEXPECTEDLY(Imm32IsCrossProcessAccess(hWnd))
75#define IMM_INIT_MAGIC 0x19650412
76#define IMM_INVALID_CANDFORM ULONG_MAX
77#define INVALID_HOTKEY_ID 0xFFFFFFFF
78#define MAX_CANDIDATEFORM 4
79#define MAX_IMM_FILENAME 80
81#define LANGID_CHINESE_SIMPLIFIED MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED)
82#define LANGID_CHINESE_TRADITIONAL MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL)
83#define LANGID_JAPANESE MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT)
85#define REGKEY_KEYBOARD_LAYOUTS L"System\\CurrentControlSet\\Control\\Keyboard Layouts"
100#define ValidateHwndNoErr(hwnd) ValidateHandleNoErr((hwnd), TYPE_WINDOW)
101#define ValidateHwnd(hwnd) ValidateHandle((hwnd), TYPE_WINDOW)
105#define ImmLocalFree(lpData) HeapFree(ghImmHeap, 0, (lpData))
120#define ImeDpi_IsUnicode(pImeDpi) ((pImeDpi)->ImeInfo.fdwProperty & IME_PROP_UNICODE)
static HANDLE ULONG_PTR dwData
_In_ int _In_ BOOL bCreate
WORD WORD PSZ PSZ pszFileName
BOOL Imm32LoadImeVerInfo(_Out_ PIMEINFOEX pImeInfoEx)
DWORD Imm32BuildHimcList(DWORD dwThreadId, HIMC **pphList)
DWORD CandidateListAnsiToWide(const CANDIDATELIST *pAnsiCL, LPCANDIDATELIST pWideCL, DWORD dwBufLen, UINT uCodePage)
BOOL Imm32IsCrossThreadAccess(HIMC hIMC)
LONG IchAnsiFromWide(LONG cchWide, LPCWSTR pchWide, UINT uCodePage)
DWORD CandidateListWideToAnsi(const CANDIDATELIST *pWideCL, LPCANDIDATELIST pAnsiCL, DWORD dwBufLen, UINT uCodePage)
HRESULT CtfImeSetActiveContextAlways(_In_ HIMC hIMC, _In_ BOOL fActive, _In_ HWND hWnd, _In_ HKL hKL)
PIME_SUBSTATE Imm32FetchImeSubState(PIME_STATE pState, HKL hKL)
LPINPUTCONTEXT Imm32InternalLockIMC(HIMC hIMC, BOOL fSelect)
LPVOID FASTCALL ValidateHandleNoErr(HANDLE hObject, UINT uType)
BOOL Imm32LoadImeStateSentence(LPINPUTCONTEXTDX pIC, PIME_STATE pState, HKL hKL)
RTL_CRITICAL_SECTION gcsImeDpi
DWORD Imm32ReconvertWideFromAnsi(LPRECONVERTSTRING pDest, const RECONVERTSTRING *pSrc, UINT uCodePage)
HRESULT CtfImeCreateThreadMgr(VOID)
HRESULT CtfImmCoInitialize(VOID)
HRESULT CtfImeDestroyThreadMgr(VOID)
LPWSTR Imm32WideFromAnsi(UINT uCodePage, LPCSTR pszA)
HRESULT CtfImmTIMCreateInputContext(_In_ HIMC hIMC)
PTHREADINFO FASTCALL Imm32CurrentPti(VOID)
HRESULT Imm32ActivateOrDeactivateTIM(_In_ BOOL bCreate)
BOOL Imm32MakeIMENotify(_In_ HIMC hIMC, _In_ HWND hwnd, _In_ DWORD dwAction, _In_ DWORD dwIndex, _Inout_opt_ DWORD_PTR dwValue, _In_ DWORD dwCommand, _Inout_opt_ DWORD_PTR dwData)
LONG IchWideFromAnsi(LONG cchAnsi, LPCSTR pchAnsi, UINT uCodePage)
VOID LogFontAnsiToWide(const LOGFONTA *plfA, LPLOGFONTW plfW)
BOOL Imm32ReleaseIME(_In_ HKL hKL)
BOOL Imm32GetSystemLibraryPath(LPWSTR pszPath, DWORD cchPath, LPCWSTR pszFileName)
BOOL Imm32IsImcAnsi(HIMC hIMC)
HRESULT Imm32UIntToStr(_In_ DWORD dwValue, _In_ ULONG nBase, _Out_ PWSTR pszBuff, _In_ USHORT cchBuff)
BOOL Imm32SaveImeStateSentence(LPINPUTCONTEXTDX pIC, PIME_STATE pState, HKL hKL)
LPVOID FASTCALL ValidateHandle(HANDLE hObject, UINT uType)
LPSTR Imm32AnsiFromWide(UINT uCodePage, LPCWSTR pszW)
HRESULT CtfImmTIMDestroyInputContext(_In_ HIMC hIMC)
BOOL Imm32IsSystemJapaneseOrKorean(VOID)
BOOL CtfImeProcessCicHotkey(_In_ HIMC hIMC, _In_ UINT vKey, _In_ LPARAM lParam)
PIMEDPI Imm32FindOrLoadImeDpi(HKL hKL)
BOOL Imm32IsCrossProcessAccess(HWND hWnd)
PIME_STATE Imm32FetchImeState(LPINPUTCONTEXTDX pIC, HKL hKL)
DWORD Imm32ReconvertAnsiFromWide(LPRECONVERTSTRING pDest, const RECONVERTSTRING *pSrc, UINT uCodePage)
LRESULT CtfImmSetLangBand(_In_ HWND hWnd, _In_ BOOL fSet)
LPVOID ImmLocalAlloc(_In_ DWORD dwFlags, _In_ DWORD dwBytes)
DWORD g_aimm_compat_flags
VOID LogFontWideToAnsi(const LOGFONTW *plfW, LPLOGFONTA plfA)
HRESULT Imm32StrToUInt(_In_ PCWSTR pszText, _Out_ PDWORD pdwValue, _In_ ULONG nBase)
BOOL Imm32CheckImcProcess(PIMC pIMC)
_In_ HCRYPTHASH _In_ BOOL _In_ DWORD _Inout_ DWORD _In_ DWORD dwBufLen
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags