Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391/* * PROJECT: ReactOS headers * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later) * PURPOSE: Providing DDK-compatible <immdev.h> and IME/IMM development helper * COPYRIGHT: Copyright 2021-2024 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com> */
#ifndef _IMMDEV_#define _IMMDEV_
#pragma once
#include <wingdi.h>#include <imm.h>
#ifdef __cplusplusextern "C" {#endif
typedef struct _tagIMEINFO { DWORD dwPrivateDataSize; DWORD fdwProperty; DWORD fdwConversionCaps; DWORD fdwSentenceCaps; DWORD fdwUICaps; DWORD fdwSCSCaps; DWORD fdwSelectCaps;} IMEINFO, *PIMEINFO, NEAR *NPIMEINFO, FAR *LPIMEINFO;
typedef struct tagCANDIDATEINFO { DWORD dwSize; DWORD dwCount; DWORD dwOffset[32]; DWORD dwPrivateSize; DWORD dwPrivateOffset;} CANDIDATEINFO, *PCANDIDATEINFO, NEAR *NPCANDIDATEINFO, FAR *LPCANDIDATEINFO;
#if (WINVER >= 0x040A)BOOL WINAPI ImmDisableTextFrameService(_In_ DWORD dwThreadId);#endif
typedef struct tagSOFTKBDDATA { UINT uCount; WORD wCode[ANYSIZE_ARRAY][256];} SOFTKBDDATA, *PSOFTKBDDATA, NEAR *NPSOFTKBDDATA, FAR *LPSOFTKBDDATA;
typedef struct tagCOMPOSITIONSTRING { DWORD dwSize; DWORD dwCompReadAttrLen; DWORD dwCompReadAttrOffset; DWORD dwCompReadClauseLen; DWORD dwCompReadClauseOffset; DWORD dwCompReadStrLen; DWORD dwCompReadStrOffset; DWORD dwCompAttrLen; DWORD dwCompAttrOffset; DWORD dwCompClauseLen; DWORD dwCompClauseOffset; DWORD dwCompStrLen; DWORD dwCompStrOffset; DWORD dwCursorPos; DWORD dwDeltaStart; DWORD dwResultReadClauseLen; DWORD dwResultReadClauseOffset; DWORD dwResultReadStrLen; DWORD dwResultReadStrOffset; DWORD dwResultClauseLen; DWORD dwResultClauseOffset; DWORD dwResultStrLen; DWORD dwResultStrOffset; DWORD dwPrivateSize; DWORD dwPrivateOffset;} COMPOSITIONSTRING, *PCOMPOSITIONSTRING, NEAR *NPCOMPOSITIONSTRING, FAR *LPCOMPOSITIONSTRING;
typedef struct tagGUIDELINE { DWORD dwSize; DWORD dwLevel; DWORD dwIndex; DWORD dwStrLen; DWORD dwStrOffset; DWORD dwPrivateSize; DWORD dwPrivateOffset;} GUIDELINE, *PGUIDELINE, NEAR *NPGUIDELINE, FAR *LPGUIDELINE;
/* wParam for WM_IME_CONTROL */#define IMC_GETCONVERSIONMODE 0x0001#define IMC_GETSENTENCEMODE 0x0003#define IMC_GETOPENSTATUS 0x0005#define IMC_GETSOFTKBDFONT 0x0011#define IMC_SETSOFTKBDFONT 0x0012#define IMC_GETSOFTKBDPOS 0x0013#define IMC_SETSOFTKBDPOS 0x0014#define IMC_GETSOFTKBDSUBTYPE 0x0015#define IMC_SETSOFTKBDSUBTYPE 0x0016#define IMC_SETSOFTKBDDATA 0x0018
/* wParam for WM_IME_NOTIFY */#define IMN_SOFTKBDDESTROYED 0x0011
#define IMMGWL_IMC 0#define IMMGWL_PRIVATE (sizeof(LONG))
#define IMMGWLP_IMC 0#define IMMGWLP_PRIVATE (sizeof(LONG_PTR))
typedef struct _tagINPUTCONTEXT { HWND hWnd; BOOL fOpen; POINT ptStatusWndPos; POINT ptSoftKbdPos; DWORD fdwConversion; DWORD fdwSentence; union { LOGFONTA A; LOGFONTW W; } lfFont; COMPOSITIONFORM cfCompForm; CANDIDATEFORM cfCandForm[4]; HIMCC hCompStr; HIMCC hCandInfo; HIMCC hGuideLine; HIMCC hPrivate; DWORD dwNumMsgBuf; HIMCC hMsgBuf; DWORD fdwInit; DWORD dwReserve[3];} INPUTCONTEXT, *PINPUTCONTEXT, NEAR *NPINPUTCONTEXT, FAR *LPINPUTCONTEXT;
#ifndef _WIN64C_ASSERT(offsetof(INPUTCONTEXT, hWnd) == 0x0);C_ASSERT(offsetof(INPUTCONTEXT, fOpen) == 0x4);C_ASSERT(offsetof(INPUTCONTEXT, ptStatusWndPos) == 0x8);C_ASSERT(offsetof(INPUTCONTEXT, ptSoftKbdPos) == 0x10);C_ASSERT(offsetof(INPUTCONTEXT, fdwConversion) == 0x18);C_ASSERT(offsetof(INPUTCONTEXT, fdwSentence) == 0x1C);C_ASSERT(offsetof(INPUTCONTEXT, lfFont) == 0x20);C_ASSERT(offsetof(INPUTCONTEXT, cfCompForm) == 0x7C);C_ASSERT(offsetof(INPUTCONTEXT, cfCandForm) == 0x98);C_ASSERT(offsetof(INPUTCONTEXT, hCompStr) == 0x118);C_ASSERT(offsetof(INPUTCONTEXT, hCandInfo) == 0x11C);C_ASSERT(offsetof(INPUTCONTEXT, hGuideLine) == 0x120);C_ASSERT(offsetof(INPUTCONTEXT, hPrivate) == 0x124);C_ASSERT(offsetof(INPUTCONTEXT, dwNumMsgBuf) == 0x128);C_ASSERT(offsetof(INPUTCONTEXT, hMsgBuf) == 0x12C);C_ASSERT(offsetof(INPUTCONTEXT, fdwInit) == 0x130);C_ASSERT(offsetof(INPUTCONTEXT, dwReserve) == 0x134);C_ASSERT(sizeof(INPUTCONTEXT) == 0x140);#endif
/* bits of fdwInit of INPUTCONTEXT */#define INIT_STATUSWNDPOS 0x00000001#define INIT_CONVERSION 0x00000002#define INIT_SENTENCE 0x00000004#define INIT_LOGFONT 0x00000008#define INIT_COMPFORM 0x00000010#define INIT_SOFTKBDPOS 0x00000020#define INIT_GUIDMAP 0x00000040
/* bits for INPUTCONTEXTDX.dwChange */#define INPUTCONTEXTDX_CHANGE_OPEN 0x1#define INPUTCONTEXTDX_CHANGE_CONVERSION 0x2#define INPUTCONTEXTDX_CHANGE_SENTENCE 0x4#define INPUTCONTEXTDX_CHANGE_FORCE_OPEN 0x100
#ifndef WM_IME_REPORT #define WM_IME_REPORT 0x280#endif
/* WM_IME_REPORT wParam */#define IR_STRINGSTART 0x100#define IR_STRINGEND 0x101#define IR_OPENCONVERT 0x120#define IR_CHANGECONVERT 0x121#define IR_CLOSECONVERT 0x122#define IR_FULLCONVERT 0x123#define IR_IMESELECT 0x130#define IR_STRING 0x140#define IR_DBCSCHAR 0x160#define IR_UNDETERMINE 0x170#define IR_STRINGEX 0x180#define IR_MODEINFO 0x190
/* IMC */
LPINPUTCONTEXT WINAPI ImmLockIMC(_In_ HIMC hIMC);BOOL WINAPI ImmUnlockIMC(_In_ HIMC hIMC);DWORD WINAPI ImmGetIMCLockCount(_In_ HIMC hIMC);
/* IMCC */
HIMCC WINAPI ImmCreateIMCC(_In_ DWORD size);HIMCC WINAPI ImmDestroyIMCC(_In_ HIMCC block);LPVOID WINAPI ImmLockIMCC(_In_ HIMCC imcc);BOOL WINAPI ImmUnlockIMCC(_In_ HIMCC imcc);DWORD WINAPI ImmGetIMCCLockCount(_In_ HIMCC imcc);HIMCC WINAPI ImmReSizeIMCC(_In_ HIMCC imcc, _In_ DWORD size);DWORD WINAPI ImmGetIMCCSize(_In_ HIMCC imcc);
/* Messaging */
BOOL WINAPI ImmGenerateMessage(_In_ HIMC hIMC);
BOOL WINAPIImmTranslateMessage( _In_ HWND hwnd, _In_ UINT msg, _In_ WPARAM wParam, _In_ LPARAM lKeyData);
LRESULT WINAPI ImmRequestMessageA(_In_ HIMC hIMC, _In_ WPARAM wParam, _In_ LPARAM lParam);LRESULT WINAPI ImmRequestMessageW(_In_ HIMC hIMC, _In_ WPARAM wParam, _In_ LPARAM lParam);
#ifdef UNICODE #define ImmRequestMessage ImmRequestMessageW#else #define ImmRequestMessage ImmRequestMessageA#endif
typedef struct _tagTRANSMSG { UINT message; WPARAM wParam; LPARAM lParam;} TRANSMSG, *PTRANSMSG, NEAR *NPTRANSMSG, FAR *LPTRANSMSG;
typedef struct _tagTRANSMSGLIST { UINT uMsgCount; TRANSMSG TransMsg[ANYSIZE_ARRAY];} TRANSMSGLIST, *PTRANSMSGLIST, NEAR *NPTRANSMSGLIST, FAR *LPTRANSMSGLIST;
/* Soft keyboard */
HWND WINAPIImmCreateSoftKeyboard( _In_ UINT uType, _In_ HWND hwndParent, _In_ INT x, _In_ INT y);
BOOL WINAPIImmShowSoftKeyboard( _In_ HWND hwndSoftKBD, _In_ INT nCmdShow);
BOOL WINAPIImmDestroySoftKeyboard( _In_ HWND hwndSoftKBD);
/* IME file interface */
BOOL WINAPIImeInquire( _Out_ LPIMEINFO lpIMEInfo, _Out_ LPTSTR lpszWndClass, _In_ DWORD dwSystemInfoFlags);
DWORD WINAPIImeConversionList( _In_ HIMC hIMC, _In_ LPCTSTR lpSrc, _Out_ LPCANDIDATELIST lpDst, _In_ DWORD dwBufLen, _In_ UINT uFlag);
BOOL WINAPIImeRegisterWord( _In_ LPCTSTR lpszReading, _In_ DWORD dwStyle, _In_ LPCTSTR lpszString);
BOOL WINAPIImeUnregisterWord( _In_ LPCTSTR lpszReading, _In_ DWORD dwStyle, _In_ LPCTSTR lpszString);
UINT WINAPIImeGetRegisterWordStyle( _In_ UINT nItem, _Out_ LPSTYLEBUF lpStyleBuf);
UINT WINAPIImeEnumRegisterWord( _In_ REGISTERWORDENUMPROC lpfnEnumProc, _In_opt_ LPCTSTR lpszReading, _In_ DWORD dwStyle, _In_opt_ LPCTSTR lpszString, _In_opt_ LPVOID lpData);
BOOL WINAPIImeConfigure( _In_ HKL hKL, _In_ HWND hWnd, _In_ DWORD dwMode, _Inout_opt_ LPVOID lpData);
BOOL WINAPIImeDestroy( _In_ UINT uReserved);
LRESULT WINAPIImeEscape( _In_ HIMC hIMC, _In_ UINT uEscape, _Inout_opt_ LPVOID lpData);
BOOL WINAPIImeProcessKey( _In_ HIMC hIMC, _In_ UINT uVirKey, _In_ LPARAM lParam, _In_ CONST LPBYTE lpbKeyState);
BOOL WINAPIImeSelect( _In_ HIMC hIMC, _In_ BOOL fSelect);
BOOL WINAPIImeSetActiveContext( _In_ HIMC hIMC, _In_ BOOL fFlag);
UINT WINAPIImeToAsciiEx( _In_ UINT uVirKey, _In_ UINT uScanCode, _In_ CONST LPBYTE lpbKeyState, _Out_ LPTRANSMSGLIST lpTransMsgList, _In_ UINT fuState, _In_ HIMC hIMC);
BOOL WINAPINotifyIME( _In_ HIMC hIMC, _In_ DWORD dwAction, _In_ DWORD dwIndex, _In_ DWORD_PTR dwValue);
BOOL WINAPIImeSetCompositionString( _In_ HIMC hIMC, _In_ DWORD dwIndex, _In_opt_ LPCVOID lpComp, _In_ DWORD dwCompLen, _In_opt_ LPCVOID lpRead, _In_ DWORD dwReadLen);
DWORD WINAPIImeGetImeMenuItems( _In_ HIMC hIMC, _In_ DWORD dwFlags, _In_ DWORD dwType, _Inout_opt_ LPIMEMENUITEMINFO lpImeParentMenu, _Inout_opt_ LPIMEMENUITEMINFO lpImeMenu, _In_ DWORD dwSize);
#ifdef __cplusplus} /* extern "C" */#endif
/* IME Property bits */#define IME_PROP_END_UNLOAD 0x0001#define IME_PROP_KBD_CHAR_FIRST 0x0002#define IME_PROP_IGNORE_UPKEYS 0x0004#define IME_PROP_NEED_ALTKEY 0x0008#define IME_PROP_NO_KEYS_ON_CLOSE 0x0010#define IME_PROP_ACCEPT_WIDE_VKEY 0x0020
/* for NI_CONTEXTUPDATED */#define IMC_SETCONVERSIONMODE 0x0002#define IMC_SETSENTENCEMODE 0x0004#define IMC_SETOPENSTATUS 0x0006
/* dwAction for ImmNotifyIME */#define NI_CONTEXTUPDATED 0x0003#define NI_OPENCANDIDATE 0x0010#define NI_CLOSECANDIDATE 0x0011#define NI_SELECTCANDIDATESTR 0x0012#define NI_CHANGECANDIDATELIST 0x0013#define NI_FINALIZECONVERSIONRESULT 0x0014#define NI_COMPOSITIONSTR 0x0015#define NI_SETCANDIDATE_PAGESTART 0x0016#define NI_SETCANDIDATE_PAGESIZE 0x0017#define NI_IMEMENUSELECTED 0x0018
/* dwSystemInfoFlags bits */#define IME_SYSINFO_WINLOGON 0x0001#define IME_SYSINFO_WOW16 0x0002
#endif /* ndef _IMMDEV_ */