Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

273 lines
11 KiB

  1. //+---------------------------------------------------------------------------
  2. //
  3. // File: pimm.h
  4. //
  5. // Contents: CProcessIMM
  6. //
  7. //----------------------------------------------------------------------------
  8. #ifndef PIMM_H
  9. #define PIMM_H
  10. #include "private.h"
  11. #include "list.h"
  12. //+---------------------------------------------------------------------------
  13. //
  14. // CProcessIMM
  15. //
  16. //----------------------------------------------------------------------------
  17. class CProcessIMM : public IActiveIMMAppEx,
  18. public IActiveIMMMessagePumpOwner,
  19. public IAImmThreadCompartment,
  20. public IServiceProvider
  21. {
  22. public:
  23. CProcessIMM() {}
  24. //
  25. // IUnknown methods
  26. //
  27. STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj);
  28. STDMETHODIMP_(ULONG) AddRef(void);
  29. STDMETHODIMP_(ULONG) Release(void);
  30. //
  31. // IActiveIMMMessagePumpOwner
  32. //
  33. STDMETHODIMP Start();
  34. STDMETHODIMP End();
  35. STDMETHODIMP OnTranslateMessage(const MSG *pMsg);
  36. STDMETHODIMP Pause(DWORD *pdwCookie);
  37. STDMETHODIMP Resume(DWORD dwCookie);
  38. //
  39. // IActiveIMMApp/IActiveIMM methods
  40. //
  41. /*
  42. * AIMM Input Context (hIMC) Methods.
  43. */
  44. STDMETHODIMP CreateContext(HIMC *phIMC);
  45. STDMETHODIMP DestroyContext(HIMC hIME);
  46. STDMETHODIMP AssociateContext(HWND hWnd, HIMC hIME, HIMC *phPrev);
  47. STDMETHODIMP AssociateContextEx(HWND hWnd, HIMC hIMC, DWORD dwFlags);
  48. STDMETHODIMP GetContext(HWND hWnd, HIMC *phIMC);
  49. STDMETHODIMP ReleaseContext(HWND hWnd, HIMC hIMC);
  50. STDMETHODIMP GetIMCLockCount(HIMC hIMC, DWORD *pdwLockCount);
  51. STDMETHODIMP LockIMC(HIMC hIMC, INPUTCONTEXT **ppIMC);
  52. STDMETHODIMP UnlockIMC(HIMC hIMC);
  53. /*
  54. * AIMM Input Context Components (hIMCC) API Methods.
  55. */
  56. STDMETHODIMP CreateIMCC(DWORD dwSize, HIMCC *phIMCC);
  57. STDMETHODIMP DestroyIMCC(HIMCC hIMCC);
  58. STDMETHODIMP GetIMCCSize(HIMCC hIMCC, DWORD *pdwSize);
  59. STDMETHODIMP ReSizeIMCC(HIMCC hIMCC, DWORD dwSize, HIMCC *phIMCC);
  60. STDMETHODIMP GetIMCCLockCount(HIMCC hIMCC, DWORD *pdwLockCount);
  61. STDMETHODIMP LockIMCC(HIMCC hIMCC, void **ppv);
  62. STDMETHODIMP UnlockIMCC(HIMCC hIMCC);
  63. /*
  64. * AIMM Open Status API Methods
  65. */
  66. STDMETHODIMP GetOpenStatus(HIMC hIMC);
  67. STDMETHODIMP SetOpenStatus(HIMC hIMC, BOOL fOpen);
  68. /*
  69. * AIMM Conversion Status API Methods
  70. */
  71. STDMETHODIMP GetConversionStatus(HIMC hIMC, DWORD *lpfdwConversion, DWORD *lpfdwSentence);
  72. STDMETHODIMP SetConversionStatus(HIMC hIMC, DWORD fdwConversion, DWORD fdwSentence);
  73. /*
  74. * AIMM Status Window Pos API Methods
  75. */
  76. STDMETHODIMP GetStatusWindowPos(HIMC hIMC, POINT *lpptPos);
  77. STDMETHODIMP SetStatusWindowPos(HIMC hIMC, POINT *lpptPos);
  78. /*
  79. * AIMM Composition String API Methods
  80. */
  81. STDMETHODIMP GetCompositionStringA(HIMC hIMC, DWORD dwIndex, DWORD dwBufLen, LONG *plCopied, LPVOID lpBuf);
  82. STDMETHODIMP GetCompositionStringW(HIMC hIMC, DWORD dwIndex, DWORD dwBufLen, LONG *plCopied, LPVOID lpBuf);
  83. STDMETHODIMP SetCompositionStringA(HIMC hIMC, DWORD dwIndex, LPVOID lpComp, DWORD dwCompLen, LPVOID lpRead, DWORD dwReadLen);
  84. STDMETHODIMP SetCompositionStringW(HIMC hIMC, DWORD dwIndex, LPVOID lpComp, DWORD dwCompLen, LPVOID lpRead, DWORD dwReadLen);
  85. /*
  86. * AIMM Composition Font API Methods
  87. */
  88. STDMETHODIMP GetCompositionFontA(HIMC hIMC, LOGFONTA *lplf);
  89. STDMETHODIMP GetCompositionFontW(HIMC hIMC, LOGFONTW *lplf);
  90. STDMETHODIMP SetCompositionFontA(HIMC hIMC, LOGFONTA *lplf);
  91. STDMETHODIMP SetCompositionFontW(HIMC hIMC, LOGFONTW *lplf);
  92. /*
  93. * AIMM Composition Window API Methods
  94. */
  95. STDMETHODIMP GetCompositionWindow(HIMC hIMC, COMPOSITIONFORM *lpCompForm);
  96. STDMETHODIMP SetCompositionWindow(HIMC hIMC, COMPOSITIONFORM *lpCompForm);
  97. /*
  98. * AIMM Candidate List API Methods
  99. */
  100. STDMETHODIMP GetCandidateListA(HIMC hIMC, DWORD dwIndex, UINT uBufLen, CANDIDATELIST *lpCandList, UINT *puCopied);
  101. STDMETHODIMP GetCandidateListW(HIMC hIMC, DWORD dwIndex, UINT uBufLen, CANDIDATELIST *lpCandList, UINT *puCopied);
  102. STDMETHODIMP GetCandidateListCountA(HIMC hIMC, DWORD *lpdwListSize, DWORD *pdwBufLen);
  103. STDMETHODIMP GetCandidateListCountW(HIMC hIMC, DWORD *lpdwListSize, DWORD *pdwBufLen);
  104. /*
  105. * AIMM Candidate Window API Methods
  106. */
  107. STDMETHODIMP GetCandidateWindow(HIMC hIMC, DWORD dwBufLen, CANDIDATEFORM *lpCandidate);
  108. STDMETHODIMP SetCandidateWindow(HIMC hIMC, CANDIDATEFORM *lpCandidate);
  109. /*
  110. * AIMM Guide Line API Methods
  111. */
  112. STDMETHODIMP GetGuideLineA(HIMC hIMC, DWORD dwIndex, DWORD dwBufLen, LPSTR pBuf, DWORD *pdwResult);
  113. STDMETHODIMP GetGuideLineW(HIMC hIMC, DWORD dwIndex, DWORD dwBufLen, LPWSTR pBuf, DWORD *pdwResult);
  114. /*
  115. * AIMM Notify IME API Method
  116. */
  117. STDMETHODIMP NotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue);
  118. /*
  119. * AIMM Menu Items API Methods
  120. */
  121. STDMETHODIMP GetImeMenuItemsA(HIMC hIMC, DWORD dwFlags, DWORD dwType, IMEMENUITEMINFOA *pImeParentMenu, IMEMENUITEMINFOA *pImeMenu, DWORD dwSize, DWORD *pdwResult);
  122. STDMETHODIMP GetImeMenuItemsW(HIMC hIMC, DWORD dwFlags, DWORD dwType, IMEMENUITEMINFOW *pImeParentMenu, IMEMENUITEMINFOW *pImeMenu, DWORD dwSize, DWORD *pdwResult);
  123. /*
  124. * AIMM Register Word API Methods
  125. */
  126. STDMETHODIMP RegisterWordA(HKL hKL, LPSTR lpszReading, DWORD dwStyle, LPSTR lpszRegister);
  127. STDMETHODIMP RegisterWordW(HKL hKL, LPWSTR lpszReading, DWORD dwStyle, LPWSTR lpszRegister);
  128. STDMETHODIMP UnregisterWordA(HKL hKL, LPSTR lpszReading, DWORD dwStyle, LPSTR lpszUnregister);
  129. STDMETHODIMP UnregisterWordW(HKL hKL, LPWSTR lpszReading, DWORD dwStyle, LPWSTR lpszUnregister);
  130. STDMETHODIMP EnumRegisterWordA(HKL hKL, LPSTR szReading, DWORD dwStyle, LPSTR szRegister, LPVOID lpData, IEnumRegisterWordA **pEnum);
  131. STDMETHODIMP EnumRegisterWordW(HKL hKL, LPWSTR szReading, DWORD dwStyle, LPWSTR szRegister, LPVOID lpData, IEnumRegisterWordW **pEnum);
  132. STDMETHODIMP GetRegisterWordStyleA(HKL hKL, UINT nItem, STYLEBUFA *lpStyleBuf, UINT *puCopied);
  133. STDMETHODIMP GetRegisterWordStyleW(HKL hKL, UINT nItem, STYLEBUFW *lpStyleBuf, UINT *puCopied);
  134. /*
  135. * AIMM Configuration API Methods.
  136. */
  137. STDMETHODIMP ConfigureIMEA(HKL hKL, HWND hWnd, DWORD dwMode, REGISTERWORDA *lpdata);
  138. STDMETHODIMP ConfigureIMEW(HKL hKL, HWND hWnd, DWORD dwMode, REGISTERWORDW *lpdata);
  139. STDMETHODIMP GetDescriptionA(HKL hKL, UINT uBufLen, LPSTR lpszDescription, UINT *puCopied);
  140. STDMETHODIMP GetDescriptionW(HKL hKL, UINT uBufLen, LPWSTR lpszDescription, UINT *puCopied);
  141. STDMETHODIMP GetIMEFileNameA(HKL hKL, UINT uBufLen, LPSTR lpszFileName, UINT *puCopied);
  142. STDMETHODIMP GetIMEFileNameW(HKL hKL, UINT uBufLen, LPWSTR lpszFileName, UINT *puCopied);
  143. STDMETHODIMP InstallIMEA(LPSTR lpszIMEFileName, LPSTR lpszLayoutText, HKL *phKL);
  144. STDMETHODIMP InstallIMEW(LPWSTR lpszIMEFileName, LPWSTR lpszLayoutText, HKL *phKL);
  145. STDMETHODIMP GetProperty(HKL hKL, DWORD fdwIndex, DWORD *pdwProperty);
  146. STDMETHODIMP IsIME(HKL hKL);
  147. // others
  148. STDMETHODIMP EscapeA(HKL hKL, HIMC hIMC, UINT uEscape, LPVOID lpData, LRESULT *plResult);
  149. STDMETHODIMP EscapeW(HKL hKL, HIMC hIMC, UINT uEscape, LPVOID lpData, LRESULT *plResult);
  150. STDMETHODIMP GetConversionListA(HKL hKL, HIMC hIMC, LPSTR lpSrc, UINT uBufLen, UINT uFlag, CANDIDATELIST *lpDst, UINT *puCopied);
  151. STDMETHODIMP GetConversionListW(HKL hKL, HIMC hIMC, LPWSTR lpSrc, UINT uBufLen, UINT uFlag, CANDIDATELIST *lpDst, UINT *puCopied);
  152. STDMETHODIMP GetDefaultIMEWnd(HWND hWnd, HWND *phDefWnd);
  153. STDMETHODIMP GetVirtualKey(HWND hWnd, UINT *puVirtualKey);
  154. STDMETHODIMP IsUIMessageA(HWND hWndIME, UINT msg, WPARAM wParam, LPARAM lParam);
  155. STDMETHODIMP IsUIMessageW(HWND hWndIME, UINT msg, WPARAM wParam, LPARAM lParam);
  156. // ime helper methods
  157. STDMETHODIMP GenerateMessage(HIMC hIMC);
  158. // hot key manipulation api's
  159. STDMETHODIMP GetHotKey(DWORD dwHotKeyID, UINT *puModifiers, UINT *puVKey, HKL *phKL);
  160. STDMETHODIMP SetHotKey(DWORD dwHotKeyID, UINT uModifiers, UINT uVKey, HKL hKL);
  161. STDMETHODIMP SimulateHotKey(HWND hWnd, DWORD dwHotKeyID);
  162. // soft keyboard api's
  163. STDMETHODIMP CreateSoftKeyboard(UINT uType, HWND hOwner, int x, int y, HWND *phSoftKbdWnd);
  164. STDMETHODIMP DestroySoftKeyboard(HWND hSoftKbdWnd);
  165. STDMETHODIMP ShowSoftKeyboard(HWND hSoftKbdWnd, int nCmdShow);
  166. // win98/nt5 apis
  167. STDMETHODIMP DisableIME(DWORD idThread);
  168. STDMETHODIMP RequestMessageA(HIMC hIMC, WPARAM wParam, LPARAM lParam, LRESULT *plResult);
  169. STDMETHODIMP RequestMessageW(HIMC hIMC, WPARAM wParam, LPARAM lParam, LRESULT *plResult);
  170. STDMETHODIMP EnumInputContext(DWORD idThread, IEnumInputContext **ppEnum);
  171. // methods without corresponding IMM APIs
  172. //
  173. // IActiveIMMApp methods
  174. //
  175. STDMETHODIMP Activate(BOOL fRestoreLayout);
  176. STDMETHODIMP Deactivate();
  177. STDMETHODIMP OnDefWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, LRESULT *plResult);
  178. //
  179. // FilterClientWindows
  180. //
  181. STDMETHODIMP FilterClientWindows(ATOM *aaWindowClasses, UINT uSize);
  182. //
  183. //
  184. //
  185. STDMETHODIMP GetCodePageA(HKL hKL, UINT *uCodePage);
  186. STDMETHODIMP GetLangId(HKL hKL, LANGID *plid);
  187. //
  188. // IServiceProvider
  189. //
  190. STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, void **ppv);
  191. //
  192. // IActiveIMMAppEx
  193. //
  194. STDMETHODIMP FilterClientWindowsEx(HWND hWnd, BOOL fGuidMap);
  195. STDMETHODIMP FilterClientWindowsGUIDMap(ATOM *aaWindowClasses, UINT uSize, BOOL *aaGuidMap);
  196. STDMETHODIMP GetGuidAtom(HIMC hImc, BYTE bAttr, TfGuidAtom *pGuidAtom);
  197. STDMETHODIMP UnfilterClientWindowsEx(HWND hWnd);
  198. //
  199. // IAImmThreadCompartment,
  200. //
  201. STDMETHODIMP SetThreadCompartmentValue(REFGUID rguid, VARIANT *pvar);
  202. STDMETHODIMP GetThreadCompartmentValue(REFGUID rguid, VARIANT *pvar);
  203. public:
  204. CFilterList _FilterList;
  205. private:
  206. BOOL _IsValidKeyboardLayout(HKL hkl)
  207. {
  208. BOOL ret = FALSE;
  209. UINT uSize = ::GetKeyboardLayoutList(0, NULL);
  210. if (uSize) {
  211. HKL* pList = new HKL [uSize];
  212. if (pList) {
  213. uSize = ::GetKeyboardLayoutList(uSize, pList);
  214. for (UINT i = 0; i < uSize; i++) {
  215. if (hkl == pList[i]) {
  216. ret = TRUE;
  217. break;
  218. }
  219. }
  220. delete [] pList;
  221. }
  222. }
  223. return ret;
  224. }
  225. private:
  226. static LONG _cRef;
  227. };
  228. #endif // PIMM_H