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

//+---------------------------------------------------------------------------
//
// File: pimm.h
//
// Contents: CProcessIMM
//
//----------------------------------------------------------------------------
#ifndef PIMM_H
#define PIMM_H
#include "private.h"
#include "list.h"
//+---------------------------------------------------------------------------
//
// CProcessIMM
//
//----------------------------------------------------------------------------
class CProcessIMM : public IActiveIMMAppEx,
public IActiveIMMMessagePumpOwner,
public IAImmThreadCompartment,
public IServiceProvider
{
public:
CProcessIMM() {}
//
// IUnknown methods
//
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
//
// IActiveIMMMessagePumpOwner
//
STDMETHODIMP Start();
STDMETHODIMP End();
STDMETHODIMP OnTranslateMessage(const MSG *pMsg);
STDMETHODIMP Pause(DWORD *pdwCookie);
STDMETHODIMP Resume(DWORD dwCookie);
//
// IActiveIMMApp/IActiveIMM methods
//
/*
* AIMM Input Context (hIMC) Methods.
*/
STDMETHODIMP CreateContext(HIMC *phIMC);
STDMETHODIMP DestroyContext(HIMC hIME);
STDMETHODIMP AssociateContext(HWND hWnd, HIMC hIME, HIMC *phPrev);
STDMETHODIMP AssociateContextEx(HWND hWnd, HIMC hIMC, DWORD dwFlags);
STDMETHODIMP GetContext(HWND hWnd, HIMC *phIMC);
STDMETHODIMP ReleaseContext(HWND hWnd, HIMC hIMC);
STDMETHODIMP GetIMCLockCount(HIMC hIMC, DWORD *pdwLockCount);
STDMETHODIMP LockIMC(HIMC hIMC, INPUTCONTEXT **ppIMC);
STDMETHODIMP UnlockIMC(HIMC hIMC);
/*
* AIMM Input Context Components (hIMCC) API Methods.
*/
STDMETHODIMP CreateIMCC(DWORD dwSize, HIMCC *phIMCC);
STDMETHODIMP DestroyIMCC(HIMCC hIMCC);
STDMETHODIMP GetIMCCSize(HIMCC hIMCC, DWORD *pdwSize);
STDMETHODIMP ReSizeIMCC(HIMCC hIMCC, DWORD dwSize, HIMCC *phIMCC);
STDMETHODIMP GetIMCCLockCount(HIMCC hIMCC, DWORD *pdwLockCount);
STDMETHODIMP LockIMCC(HIMCC hIMCC, void **ppv);
STDMETHODIMP UnlockIMCC(HIMCC hIMCC);
/*
* AIMM Open Status API Methods
*/
STDMETHODIMP GetOpenStatus(HIMC hIMC);
STDMETHODIMP SetOpenStatus(HIMC hIMC, BOOL fOpen);
/*
* AIMM Conversion Status API Methods
*/
STDMETHODIMP GetConversionStatus(HIMC hIMC, DWORD *lpfdwConversion, DWORD *lpfdwSentence);
STDMETHODIMP SetConversionStatus(HIMC hIMC, DWORD fdwConversion, DWORD fdwSentence);
/*
* AIMM Status Window Pos API Methods
*/
STDMETHODIMP GetStatusWindowPos(HIMC hIMC, POINT *lpptPos);
STDMETHODIMP SetStatusWindowPos(HIMC hIMC, POINT *lpptPos);
/*
* AIMM Composition String API Methods
*/
STDMETHODIMP GetCompositionStringA(HIMC hIMC, DWORD dwIndex, DWORD dwBufLen, LONG *plCopied, LPVOID lpBuf);
STDMETHODIMP GetCompositionStringW(HIMC hIMC, DWORD dwIndex, DWORD dwBufLen, LONG *plCopied, LPVOID lpBuf);
STDMETHODIMP SetCompositionStringA(HIMC hIMC, DWORD dwIndex, LPVOID lpComp, DWORD dwCompLen, LPVOID lpRead, DWORD dwReadLen);
STDMETHODIMP SetCompositionStringW(HIMC hIMC, DWORD dwIndex, LPVOID lpComp, DWORD dwCompLen, LPVOID lpRead, DWORD dwReadLen);
/*
* AIMM Composition Font API Methods
*/
STDMETHODIMP GetCompositionFontA(HIMC hIMC, LOGFONTA *lplf);
STDMETHODIMP GetCompositionFontW(HIMC hIMC, LOGFONTW *lplf);
STDMETHODIMP SetCompositionFontA(HIMC hIMC, LOGFONTA *lplf);
STDMETHODIMP SetCompositionFontW(HIMC hIMC, LOGFONTW *lplf);
/*
* AIMM Composition Window API Methods
*/
STDMETHODIMP GetCompositionWindow(HIMC hIMC, COMPOSITIONFORM *lpCompForm);
STDMETHODIMP SetCompositionWindow(HIMC hIMC, COMPOSITIONFORM *lpCompForm);
/*
* AIMM Candidate List API Methods
*/
STDMETHODIMP GetCandidateListA(HIMC hIMC, DWORD dwIndex, UINT uBufLen, CANDIDATELIST *lpCandList, UINT *puCopied);
STDMETHODIMP GetCandidateListW(HIMC hIMC, DWORD dwIndex, UINT uBufLen, CANDIDATELIST *lpCandList, UINT *puCopied);
STDMETHODIMP GetCandidateListCountA(HIMC hIMC, DWORD *lpdwListSize, DWORD *pdwBufLen);
STDMETHODIMP GetCandidateListCountW(HIMC hIMC, DWORD *lpdwListSize, DWORD *pdwBufLen);
/*
* AIMM Candidate Window API Methods
*/
STDMETHODIMP GetCandidateWindow(HIMC hIMC, DWORD dwBufLen, CANDIDATEFORM *lpCandidate);
STDMETHODIMP SetCandidateWindow(HIMC hIMC, CANDIDATEFORM *lpCandidate);
/*
* AIMM Guide Line API Methods
*/
STDMETHODIMP GetGuideLineA(HIMC hIMC, DWORD dwIndex, DWORD dwBufLen, LPSTR pBuf, DWORD *pdwResult);
STDMETHODIMP GetGuideLineW(HIMC hIMC, DWORD dwIndex, DWORD dwBufLen, LPWSTR pBuf, DWORD *pdwResult);
/*
* AIMM Notify IME API Method
*/
STDMETHODIMP NotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue);
/*
* AIMM Menu Items API Methods
*/
STDMETHODIMP GetImeMenuItemsA(HIMC hIMC, DWORD dwFlags, DWORD dwType, IMEMENUITEMINFOA *pImeParentMenu, IMEMENUITEMINFOA *pImeMenu, DWORD dwSize, DWORD *pdwResult);
STDMETHODIMP GetImeMenuItemsW(HIMC hIMC, DWORD dwFlags, DWORD dwType, IMEMENUITEMINFOW *pImeParentMenu, IMEMENUITEMINFOW *pImeMenu, DWORD dwSize, DWORD *pdwResult);
/*
* AIMM Register Word API Methods
*/
STDMETHODIMP RegisterWordA(HKL hKL, LPSTR lpszReading, DWORD dwStyle, LPSTR lpszRegister);
STDMETHODIMP RegisterWordW(HKL hKL, LPWSTR lpszReading, DWORD dwStyle, LPWSTR lpszRegister);
STDMETHODIMP UnregisterWordA(HKL hKL, LPSTR lpszReading, DWORD dwStyle, LPSTR lpszUnregister);
STDMETHODIMP UnregisterWordW(HKL hKL, LPWSTR lpszReading, DWORD dwStyle, LPWSTR lpszUnregister);
STDMETHODIMP EnumRegisterWordA(HKL hKL, LPSTR szReading, DWORD dwStyle, LPSTR szRegister, LPVOID lpData, IEnumRegisterWordA **pEnum);
STDMETHODIMP EnumRegisterWordW(HKL hKL, LPWSTR szReading, DWORD dwStyle, LPWSTR szRegister, LPVOID lpData, IEnumRegisterWordW **pEnum);
STDMETHODIMP GetRegisterWordStyleA(HKL hKL, UINT nItem, STYLEBUFA *lpStyleBuf, UINT *puCopied);
STDMETHODIMP GetRegisterWordStyleW(HKL hKL, UINT nItem, STYLEBUFW *lpStyleBuf, UINT *puCopied);
/*
* AIMM Configuration API Methods.
*/
STDMETHODIMP ConfigureIMEA(HKL hKL, HWND hWnd, DWORD dwMode, REGISTERWORDA *lpdata);
STDMETHODIMP ConfigureIMEW(HKL hKL, HWND hWnd, DWORD dwMode, REGISTERWORDW *lpdata);
STDMETHODIMP GetDescriptionA(HKL hKL, UINT uBufLen, LPSTR lpszDescription, UINT *puCopied);
STDMETHODIMP GetDescriptionW(HKL hKL, UINT uBufLen, LPWSTR lpszDescription, UINT *puCopied);
STDMETHODIMP GetIMEFileNameA(HKL hKL, UINT uBufLen, LPSTR lpszFileName, UINT *puCopied);
STDMETHODIMP GetIMEFileNameW(HKL hKL, UINT uBufLen, LPWSTR lpszFileName, UINT *puCopied);
STDMETHODIMP InstallIMEA(LPSTR lpszIMEFileName, LPSTR lpszLayoutText, HKL *phKL);
STDMETHODIMP InstallIMEW(LPWSTR lpszIMEFileName, LPWSTR lpszLayoutText, HKL *phKL);
STDMETHODIMP GetProperty(HKL hKL, DWORD fdwIndex, DWORD *pdwProperty);
STDMETHODIMP IsIME(HKL hKL);
// others
STDMETHODIMP EscapeA(HKL hKL, HIMC hIMC, UINT uEscape, LPVOID lpData, LRESULT *plResult);
STDMETHODIMP EscapeW(HKL hKL, HIMC hIMC, UINT uEscape, LPVOID lpData, LRESULT *plResult);
STDMETHODIMP GetConversionListA(HKL hKL, HIMC hIMC, LPSTR lpSrc, UINT uBufLen, UINT uFlag, CANDIDATELIST *lpDst, UINT *puCopied);
STDMETHODIMP GetConversionListW(HKL hKL, HIMC hIMC, LPWSTR lpSrc, UINT uBufLen, UINT uFlag, CANDIDATELIST *lpDst, UINT *puCopied);
STDMETHODIMP GetDefaultIMEWnd(HWND hWnd, HWND *phDefWnd);
STDMETHODIMP GetVirtualKey(HWND hWnd, UINT *puVirtualKey);
STDMETHODIMP IsUIMessageA(HWND hWndIME, UINT msg, WPARAM wParam, LPARAM lParam);
STDMETHODIMP IsUIMessageW(HWND hWndIME, UINT msg, WPARAM wParam, LPARAM lParam);
// ime helper methods
STDMETHODIMP GenerateMessage(HIMC hIMC);
// hot key manipulation api's
STDMETHODIMP GetHotKey(DWORD dwHotKeyID, UINT *puModifiers, UINT *puVKey, HKL *phKL);
STDMETHODIMP SetHotKey(DWORD dwHotKeyID, UINT uModifiers, UINT uVKey, HKL hKL);
STDMETHODIMP SimulateHotKey(HWND hWnd, DWORD dwHotKeyID);
// soft keyboard api's
STDMETHODIMP CreateSoftKeyboard(UINT uType, HWND hOwner, int x, int y, HWND *phSoftKbdWnd);
STDMETHODIMP DestroySoftKeyboard(HWND hSoftKbdWnd);
STDMETHODIMP ShowSoftKeyboard(HWND hSoftKbdWnd, int nCmdShow);
// win98/nt5 apis
STDMETHODIMP DisableIME(DWORD idThread);
STDMETHODIMP RequestMessageA(HIMC hIMC, WPARAM wParam, LPARAM lParam, LRESULT *plResult);
STDMETHODIMP RequestMessageW(HIMC hIMC, WPARAM wParam, LPARAM lParam, LRESULT *plResult);
STDMETHODIMP EnumInputContext(DWORD idThread, IEnumInputContext **ppEnum);
// methods without corresponding IMM APIs
//
// IActiveIMMApp methods
//
STDMETHODIMP Activate(BOOL fRestoreLayout);
STDMETHODIMP Deactivate();
STDMETHODIMP OnDefWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, LRESULT *plResult);
//
// FilterClientWindows
//
STDMETHODIMP FilterClientWindows(ATOM *aaWindowClasses, UINT uSize);
//
//
//
STDMETHODIMP GetCodePageA(HKL hKL, UINT *uCodePage);
STDMETHODIMP GetLangId(HKL hKL, LANGID *plid);
//
// IServiceProvider
//
STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, void **ppv);
//
// IActiveIMMAppEx
//
STDMETHODIMP FilterClientWindowsEx(HWND hWnd, BOOL fGuidMap);
STDMETHODIMP FilterClientWindowsGUIDMap(ATOM *aaWindowClasses, UINT uSize, BOOL *aaGuidMap);
STDMETHODIMP GetGuidAtom(HIMC hImc, BYTE bAttr, TfGuidAtom *pGuidAtom);
STDMETHODIMP UnfilterClientWindowsEx(HWND hWnd);
//
// IAImmThreadCompartment,
//
STDMETHODIMP SetThreadCompartmentValue(REFGUID rguid, VARIANT *pvar);
STDMETHODIMP GetThreadCompartmentValue(REFGUID rguid, VARIANT *pvar);
public:
CFilterList _FilterList;
private:
BOOL _IsValidKeyboardLayout(HKL hkl)
{
BOOL ret = FALSE;
UINT uSize = ::GetKeyboardLayoutList(0, NULL);
if (uSize) {
HKL* pList = new HKL [uSize];
if (pList) {
uSize = ::GetKeyboardLayoutList(uSize, pList);
for (UINT i = 0; i < uSize; i++) {
if (hkl == pList[i]) {
ret = TRUE;
break;
}
}
delete [] pList;
}
}
return ret;
}
private:
static LONG _cRef;
};
#endif // PIMM_H