|
|
//
// regimx.cpp
//
#include "private.h"
#include "regimx.h"
#include "xstring.h"
#include "catutil.h"
#include "msctfp.h"
//+---------------------------------------------------------------------------
//
// RegisterTIP
//
//----------------------------------------------------------------------------
BOOL RegisterTIP(HINSTANCE hInst, REFCLSID rclsid, WCHAR *pwszDesc, const REGTIPLANGPROFILE *plp) { ITfInputProcessorProfiles *pReg = NULL; ITfInputProcessorProfilesEx *pRegEx = NULL; HRESULT hr;
// register ourselves with the ActiveIMM
hr = CoCreateInstance(CLSID_TF_InputProcessorProfiles, NULL, CLSCTX_INPROC_SERVER, IID_ITfInputProcessorProfiles, (void**)&pReg); if (FAILED(hr)) goto Exit;
hr = pReg->Register(rclsid);
if (FAILED(hr)) goto Exit;
pReg->QueryInterface(IID_ITfInputProcessorProfilesEx, (void**)&pRegEx);
while (plp->langid) { WCHAR wszFilePath[MAX_PATH]; WCHAR *pv = &wszFilePath[0];
wszFilePath[0] = L'\0';
if (wcslen(plp->szIconFile)) { char szFilePath[MAX_PATH]; WCHAR *pvCur;
if (0 != GetModuleFileName(hInst, szFilePath, ARRAYSIZE(szFilePath))) { StringCchCopyW(wszFilePath, ARRAYSIZE(wszFilePath), AtoW(szFilePath)); }
pv = pvCur = &wszFilePath[0]; while (*pvCur) { if (*pvCur == L'\\') pv = pvCur + 1; pvCur++; } *pv = L'\0'; }
UINT uRemainFilePathLen = (ARRAYSIZE(wszFilePath) - (UINT)(pv - &wszFilePath[0] + 1)); StringCchCopyW(pv, uRemainFilePathLen, plp->szIconFile); pReg->AddLanguageProfile(rclsid, plp->langid, *plp->pguidProfile, plp->szProfile, wcslen(plp->szProfile), wszFilePath, wcslen(wszFilePath), plp->uIconIndex);
if (pRegEx && plp->uDisplayDescResIndex) { pRegEx->SetLanguageProfileDisplayName(rclsid, plp->langid, *plp->pguidProfile, wszFilePath, wcslen(wszFilePath), plp->uDisplayDescResIndex); }
plp++; }
RegisterGUIDDescription(rclsid, rclsid, pwszDesc); Exit: SafeRelease(pReg); SafeRelease(pRegEx); return SUCCEEDED(hr); }
//+---------------------------------------------------------------------------
//
// UnregisterTIP
//
//----------------------------------------------------------------------------
BOOL UnregisterTIP(REFCLSID rclsid) { ITfInputProcessorProfiles *pReg; HRESULT hr;
UnregisterGUIDDescription(rclsid, rclsid);
hr = CoCreateInstance(CLSID_TF_InputProcessorProfiles, NULL, CLSCTX_INPROC_SERVER, IID_ITfInputProcessorProfiles, (void**)&pReg); if (FAILED(hr)) goto Exit;
hr = pReg->Unregister(rclsid); pReg->Release();
Exit:
return FAILED(hr) ? FALSE : TRUE; }
|