Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

immcli.h

Go to the documentation of this file.
00001 /****************************** Module Header ******************************\ 00002 * Module Name: immcli.h 00003 * 00004 * Copyright (c) 1985 - 1999, Microsoft Corporation 00005 * 00006 * Typedefs, defines, and prototypes that are used exclusively by the IMM 00007 * client-side DLL. 00008 * 00009 * History: 00010 * 11-Jan-96 wkwok Created 00011 \***************************************************************************/ 00012 00013 #ifndef _IMMCLI_ 00014 #define _IMMCLI_ 00015 00016 #pragma once 00017 00018 #define OEMRESOURCE 1 00019 00020 #include <windows.h> 00021 00022 #include <stddef.h> 00023 #include <w32err.h> 00024 #include <w32gdip.h> 00025 #include "winuserp.h" 00026 #include "winuserk.h" 00027 #include "kbd.h" 00028 #include <wowuserp.h> 00029 #include <memory.h> 00030 #include <string.h> 00031 #include <imm.h> 00032 #include <immp.h> 00033 #include <ime.h> 00034 #include <imep.h> 00035 #include <winnls32.h> 00036 00037 #include "immstruc.h" 00038 #include "immuser.h" 00039 00040 #include "user.h" 00041 00042 typedef struct _ENUMREGWORDDATA { 00043 union { 00044 REGISTERWORDENUMPROCW w; 00045 REGISTERWORDENUMPROCA a; 00046 } lpfn; 00047 LPVOID lpData; 00048 DWORD dwCodePage; 00049 } ENUMREGWORDDATA, *PENUMREGWORDDATA; 00050 00051 #define HEX_ASCII_SIZE 20 00052 00053 typedef struct tagIMELAYOUT { 00054 HKL hImeKL; 00055 WCHAR szKeyName[HEX_ASCII_SIZE]; 00056 WCHAR szImeName[IM_FILE_SIZE]; 00057 } IMELAYOUT, *PIMELAYOUT; 00058 00059 #define ImmAssert UserAssert 00060 00061 typedef struct tagFE_KEYBOARDS { 00062 BOOLEAN fJPN : 1; 00063 BOOLEAN fCHT : 1; 00064 BOOLEAN fCHS : 1; 00065 BOOLEAN fKOR : 1; 00066 } FE_KEYBOARDS; 00067 00068 /* 00069 * Function pointers to registry routines in advapi32.dll. 00070 */ 00071 typedef struct { 00072 LONG (WINAPI* RegCreateKeyW)(HKEY, LPCWSTR, PHKEY); 00073 LONG (WINAPI* RegOpenKeyW)(HKEY, LPCWSTR, PHKEY); 00074 LONG (WINAPI* RegCloseKey)(HKEY); 00075 LONG (WINAPI* RegDeleteKeyW)(HKEY, LPCWSTR); 00076 LONG (WINAPI* RegCreateKeyExW)(HKEY, LPCWSTR, DWORD, LPWSTR, DWORD, REGSAM, LPSECURITY_ATTRIBUTES, PHKEY, LPDWORD); 00077 LONG (WINAPI* RegSetValueExW)(HKEY, LPCWSTR, DWORD Reserved, DWORD, CONST BYTE*, DWORD); 00078 LONG (WINAPI* RegQueryValueExW)(HKEY, LPCWSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD); 00079 HMODULE hModule; 00080 BOOLEAN fOk; 00081 } ADVAPI_FN; 00082 00083 /***************************************************************************\ 00084 * 00085 * Globals declarations 00086 * 00087 \***************************************************************************/ 00088 00089 extern BOOLEAN gfInitialized; 00090 extern HINSTANCE ghInst; 00091 extern PVOID pImmHeap; 00092 extern PSERVERINFO gpsi; 00093 extern SHAREDINFO gSharedInfo; 00094 00095 extern PIMEDPI gpImeDpi; 00096 extern CRITICAL_SECTION gcsImeDpi; 00097 00098 extern POINT gptWorkArea; 00099 extern POINT gptRaiseEdge; 00100 extern UINT guScanCode[0XFF]; 00101 00102 extern CONST WCHAR gszRegKbdLayout[]; 00103 #ifdef LATER 00104 extern CONST INT sizeof_gszRegKbdLayout; 00105 #endif 00106 extern CONST WCHAR gszRegKbdOrder[]; 00107 extern CONST WCHAR gszValLayoutText[]; 00108 extern CONST WCHAR gszValLayoutFile[]; 00109 extern CONST WCHAR gszValImeFile[]; 00110 00111 00112 /***************************************************************************\ 00113 * 00114 * Validation handling 00115 * 00116 \***************************************************************************/ 00117 00118 #define bUser32Initialized (gpsi != NULL) 00119 00120 #define ValidateHwnd(hwnd) (((hwnd) == (HWND)NULL || !bUser32Initialized) \ 00121 ? (PWND)NULL : HMValidateHandle(hwnd, TYPE_WINDOW)) 00122 00123 #define ValidateHimc(himc) (((himc) == (HIMC)NULL || !bUser32Initialized) \ 00124 ? (PIMC)NULL : HMValidateHandle((HANDLE)himc, TYPE_INPUTCONTEXT)) 00125 00126 #define RevalidateHimc(himc) (((himc) == (HIMC)NULL || !bUser32Initialized) \ 00127 ? (PIMC)NULL : HMValidateHandleNoRip((HANDLE)himc, TYPE_INPUTCONTEXT)) 00128 00129 /***************************************************************************\ 00130 * 00131 * Memory management macros 00132 * 00133 \***************************************************************************/ 00134 00135 LPVOID ImmLocalAlloc(DWORD uFlag, DWORD uBytes); 00136 #define ImmLocalReAlloc(p, uBytes, uFlags) HeapReAlloc(pImmHeap, uFlags, (LPSTR)(p), (uBytes)) 00137 #define ImmLocalFree(p) HeapFree(pImmHeap, 0, (LPSTR)(p)) 00138 #define ImmLocalSize(p) HeapSize(pImmHeap, 0, (LPSTR)(p)) 00139 #define ImmLocalLock(p) (LPSTR)(p) 00140 #define ImmLocalUnlock(p) 00141 #define ImmLocalFlags(p) 0 00142 #define ImmLocalHandle(p) (HLOCAL)(p) 00143 00144 /***************************************************************************\ 00145 * 00146 * Other Typedefs and Macros 00147 * 00148 \***************************************************************************/ 00149 #define GetInputContextProcess(himc) \ 00150 (DWORD)NtUserQueryInputContext(himc, InputContextProcess) 00151 00152 #define GetInputContextThread(himc) \ 00153 (DWORD)NtUserQueryInputContext(himc, InputContextThread) 00154 00155 #define GetWindowProcess(hwnd) \ 00156 (ULONG_PTR)NtUserQueryWindow(hwnd, WindowProcess) 00157 00158 #define GETPROCESSID() (ULONG_PTR)(NtCurrentTeb()->ClientId.UniqueProcess) 00159 00160 #define DWORD_ALIGN(x) ((x+3)&~3) 00161 00162 #define SetICF(pClientImc, flag) ((pClientImc)->dwFlags |= flag) 00163 00164 #define ClrICF(pClientImc, flag) ((pClientImc)->dwFlags &= ~flag) 00165 00166 #define TestICF(pClientImc, flag) ((pClientImc)->dwFlags & flag) 00167 00168 #define IsWndEqual(hWnd1, hWnd2) (LOWORD(HandleToUlong(hWnd1)) == LOWORD(HandleToUlong(hWnd2)) && \ 00169 ValidateHwnd(hWnd1) == ValidateHwnd(hWnd2)) 00170 00171 #define HKL_TO_LANGID(hkl) (LOWORD(HandleToUlong(hkl))) 00172 00173 /* 00174 * Obsolete, but keep this for backward compat. for a while 00175 */ 00176 #define LANGIDFROMHKL(hkl) (LOBYTE(LOWORD((ULONG_PTR)hkl))) 00177 00178 #ifdef IMM_CONV_ON_HKL 00179 #define IMECodePage(pImeDpi) ((pImeDpi)->dwCodePage) 00180 #define CImcCodePage(pClientImc) ((pClientImc)->dwCodePage) 00181 #else 00182 #define IMECodePage(pImeDpi) (CP_ACP) 00183 #define CImcCodePage(pClientImc) (CP_ACP) 00184 #endif 00185 00186 /***************************************************************************\ 00187 * 00188 * Function declarations 00189 * 00190 \***************************************************************************/ 00191 00192 /* 00193 * context.c 00194 */ 00195 BOOL CreateInputContext( 00196 HIMC hImc, 00197 HKL hKL, 00198 BOOL fCanCallImeSelect); 00199 00200 BOOL DestroyInputContext( 00201 HIMC hImc, 00202 HKL hKL, 00203 BOOL bTerminate); 00204 00205 VOID SelectInputContext( 00206 HKL hSelKL, 00207 HKL hUnSelKL, 00208 HIMC hImc); 00209 00210 DWORD BuildHimcList( 00211 DWORD idThread, 00212 HIMC **pphimcFirst); 00213 00214 HIMC ImmGetSaveContext( 00215 HWND hWnd, 00216 DWORD dwFlag); 00217 00218 /* 00219 * ctxtinfo.c 00220 */ 00221 BOOL ImmSetCompositionStringWorker( 00222 HIMC hImc, 00223 DWORD dwIndex, 00224 LPVOID lpComp, 00225 DWORD dwCompLen, 00226 LPVOID lpRead, 00227 DWORD dwReadLen, 00228 BOOL fAnsi); 00229 00230 DWORD ImmGetCandidateListCountWorker( 00231 HIMC hImc, 00232 LPDWORD lpdwListCount, 00233 BOOL fAnsi); 00234 00235 DWORD ImmGetCandidateListWorker( 00236 HIMC hImc, 00237 DWORD dwIndex, 00238 LPCANDIDATELIST lpCandList, 00239 DWORD dwBufLen, 00240 BOOL fAnsi); 00241 00242 DWORD ImmGetGuideLineWorker( 00243 HIMC hImc, 00244 DWORD dwIndex, 00245 LPBYTE lpBuf, 00246 DWORD dwBufLen, 00247 BOOL fAnsi); 00248 00249 LONG InternalGetCompositionStringA( 00250 LPCOMPOSITIONSTRING lpCompStr, 00251 DWORD dwIndex, 00252 LPVOID lpBuf, 00253 DWORD dwBufLen, 00254 BOOL fAnsiImc, 00255 DWORD dwCodePage); 00256 00257 LONG InternalGetCompositionStringW( 00258 LPCOMPOSITIONSTRING lpCompStr, 00259 DWORD dwIndex, 00260 LPVOID lpBuf, 00261 DWORD dwBufLen, 00262 BOOL fAnsiImc, 00263 DWORD dwCodePage); 00264 00265 DWORD InternalGetCandidateListAtoW( 00266 LPCANDIDATELIST lpCandListA, 00267 LPCANDIDATELIST lpCandListW, 00268 DWORD dwBufLen, 00269 DWORD dwCodePage); 00270 00271 DWORD InternalGetCandidateListWtoA( 00272 LPCANDIDATELIST lpCandListW, 00273 LPCANDIDATELIST lpCandListA, 00274 DWORD dwBufLen, 00275 DWORD dwCodePage); 00276 00277 DWORD CalcCharacterPositionAtoW( 00278 DWORD dwCharPosA, 00279 LPSTR lpszCharStr, 00280 DWORD dwCodePage); 00281 00282 DWORD CalcCharacterPositionWtoA( 00283 DWORD dwCharPosW, 00284 LPWSTR lpwszCharStr, 00285 DWORD dwCodePage); 00286 00287 VOID LFontAtoLFontW( 00288 LPLOGFONTA lfFontA, 00289 LPLOGFONTW lfFontW); 00290 00291 VOID LFontWtoLFontA( 00292 LPLOGFONTW lfFontW, 00293 LPLOGFONTA lfFontA); 00294 00295 BOOL MakeIMENotify( 00296 HIMC hImc, 00297 HWND hWnd, 00298 DWORD dwAction, 00299 DWORD dwIndex, 00300 DWORD dwValue, 00301 WPARAM wParam, 00302 LPARAM lParam); 00303 00304 VOID ImmSendNotification( 00305 BOOL fForProcess); 00306 00307 00308 /* 00309 * immime.c 00310 */ 00311 BOOL InquireIme( 00312 PIMEDPI pImeDpi); 00313 00314 BOOL LoadIME( 00315 PIMEINFOEX piiex, 00316 PIMEDPI pImeDpi); 00317 00318 VOID UnloadIME( 00319 PIMEDPI pImeDpi, 00320 BOOL fTerminateIme); 00321 00322 PIMEDPI LoadImeDpi( 00323 HKL hKL, 00324 BOOL fLock); 00325 00326 PIMEDPI FindOrLoadImeDpi( 00327 HKL hKL); 00328 00329 /* 00330 * layime.c 00331 */ 00332 VOID GetSystemPathName(PWSTR /*OUT*/ pwszPath, PWSTR pwszFileName, UINT maxChar); 00333 00334 BOOL LoadVersionInfo( 00335 PIMEINFOEX piiex); 00336 00337 LPWSTR MakeStringFromRegFullInfo(PKEY_VALUE_FULL_INFORMATION pKey, size_t limit); 00338 00339 /* 00340 * misc.c 00341 */ 00342 00343 PINPUTCONTEXT InternalImmLockIMC( 00344 HIMC hImc, 00345 BOOL fCanCallImeSelect); 00346 00347 BOOL ImmIsUIMessageWorker( 00348 HWND hIMEWnd, 00349 UINT message, 00350 WPARAM wParam, 00351 LPARAM lParam, 00352 BOOL fAnsi); 00353 00354 00355 PTHREADINFO PtiCurrent(VOID); 00356 00357 BOOL TestInputContextProcess( 00358 PIMC pImc); 00359 00360 PIMEDPI ImmGetImeDpi(HKL hKL); 00361 DWORD ImmGetAppCompatFlags(HIMC hImc); 00362 00363 BOOL ImmPtInRect( 00364 int left, 00365 int top, 00366 int width, 00367 int height, 00368 LPPOINT lppt); 00369 00370 UINT GetKeyboardLayoutCP( 00371 HKL hKL); 00372 00373 /* 00374 * regword.c 00375 */ 00376 UINT CALLBACK EnumRegisterWordProcA( 00377 LPCSTR lpszReading, 00378 DWORD dwStyle, 00379 LPCSTR lpszString, 00380 PENUMREGWORDDATA pEnumRegWordData); 00381 00382 UINT CALLBACK EnumRegisterWordProcW( 00383 LPCWSTR lpwszReading, 00384 DWORD dwStyle, 00385 LPCWSTR lpwszString, 00386 PENUMREGWORDDATA pEnumRegWordData); 00387 00388 /* 00389 * hotkey.c 00390 */ 00391 00392 00393 VOID ImmPostMessages( 00394 HWND hwnd, 00395 HIMC hImc, 00396 INT iNum, 00397 PTRANSMSG pTransMsg); 00398 00399 BOOL HotKeyIDDispatcher( HWND hWnd, HIMC hImc, HKL hKL, DWORD dwHotKeyID ); 00400 00401 BOOL OpenRegApi(ADVAPI_FN* pfn); 00402 void CloseRegApi(ADVAPI_FN* pfn); 00403 00404 /* 00405 * transsub.c 00406 */ 00407 LRESULT TranslateIMESubFunctions( 00408 HWND hWndApp, 00409 LPIMESTRUCT lpIme, 00410 BOOL fAnsi); 00411 00412 LRESULT TransGetLevel( HWND hWndApp ); 00413 LRESULT TransSetLevel( HWND hWndApp, LPIMESTRUCT lpIme); 00414 00415 /* 00416 * kcodecnv.c 00417 */ 00418 LRESULT TransCodeConvert( HIMC hImc, LPIMESTRUCT lpIme); 00419 LRESULT TransConvertList( HIMC hImc, LPIMESTRUCT lpIme); 00420 LRESULT TransGetMNTable( HIMC hImc, LPIMESTRUCT lpIme); 00421 00422 /* 00423 * ktranmsg.c 00424 */ 00425 UINT WINNLSTranslateMessageK( 00426 int iNumMsg, 00427 PTRANSMSG pTransMsg, 00428 LPINPUTCONTEXT lpIMC, 00429 LPCOMPOSITIONSTRING lpCompStr, 00430 BOOL bAnsiIMC); 00431 00432 /* 00433 * jtranmsg.c 00434 */ 00435 UINT WINNLSTranslateMessageJ( 00436 UINT uiNumMsg, 00437 PTRANSMSG pTransMsg, 00438 LPINPUTCONTEXT lpIMC, 00439 LPCOMPOSITIONSTRING lpCompStr, 00440 BOOL bAnsiIMC ); 00441 00442 /* 00443 * input.c 00444 */ 00445 UINT WINNLSTranslateMessage( 00446 INT iNum, // number of messages in the source buffer 00447 PTRANSMSG pTransMsg, // source buffer that contains 4.0 style messages 00448 HIMC hImc, // input context handle 00449 BOOL fAnsi, // TRUE if pdwt contains ANSI messages 00450 DWORD dwLangId ); // language ID ( KOREAN or JAPANESE ) 00451 00452 00453 /* 00454 * support routine: IsAnsiClientIMC 00455 */ 00456 __inline int IsAnsiIMC(HIMC hIMC) 00457 { 00458 BOOL bAnsi; 00459 00460 // get ansi mode of origin IMC 00461 PCLIENTIMC pClientIMC = ImmLockClientImc(hIMC); 00462 if (pClientIMC == NULL) { 00463 return -1; 00464 } 00465 bAnsi = !TestICF(pClientIMC, IMCF_UNICODE); 00466 ImmUnlockClientImc(pClientIMC); 00467 return bAnsi; 00468 } 00469 00470 #define TRACE(x) 00471 00472 // 00473 // Resources 00474 // 00475 00476 // CHT software keyboard bitmaps 00477 #define BACK_T1 100 00478 #define TAB_T1 101 00479 #define CAPS_T1 102 00480 #define ENTER_T1 103 00481 #define SHIFT_T1 104 00482 #define CTRL_T1 105 00483 #define ESC_T1 106 00484 #define ALT_T1 107 00485 #define LABEL_T1 108 00486 00487 // CHS software keyboard bitmaps 00488 #define BACKSP_C1 201 00489 #define TAB_C1 202 00490 #define CAPS_C1 203 00491 #define ENTER_C1 204 00492 #define SHIFT_C1 205 00493 #define INS_C1 206 00494 #define DEL_C1 207 00495 #define ESC_C1 208 00496 #define LABEL_C1 209 00497 00498 #endif // _IMMCLI_

Generated on Sat May 15 19:40:21 2004 for test by doxygen 1.3.7