00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
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
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
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
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
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
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
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
00189
00190
00191
00192
00193
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
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
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
00331
00332
VOID GetSystemPathName(PWSTR 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
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
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
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
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
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
00424
00425
UINT WINNLSTranslateMessageK(
00426
int iNumMsg,
00427 PTRANSMSG pTransMsg,
00428 LPINPUTCONTEXT lpIMC,
00429 LPCOMPOSITIONSTRING lpCompStr,
00430 BOOL bAnsiIMC);
00431
00432
00433
00434
00435
UINT WINNLSTranslateMessageJ(
00436 UINT uiNumMsg,
00437 PTRANSMSG pTransMsg,
00438 LPINPUTCONTEXT lpIMC,
00439 LPCOMPOSITIONSTRING lpCompStr,
00440 BOOL bAnsiIMC );
00441
00442
00443
00444
00445
UINT WINNLSTranslateMessage(
00446 INT iNum,
00447 PTRANSMSG pTransMsg,
00448 HIMC hImc,
00449 BOOL fAnsi,
00450 DWORD dwLangId );
00451
00452
00453
00454
00455
00456 __inline
int IsAnsiIMC(HIMC hIMC)
00457 {
00458
BOOL bAnsi;
00459
00460
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
00474
00475
00476
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
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_