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.
 
 
 
 
 
 

211 lines
5.0 KiB

/**************************************************************************\
* Module Name: softkbd.cpp
*
* Copyright (c) 1985 - 2000, Microsoft Corporation
*
* Main functions for Soft Keyboard Component.
*
* History:
* 28-March-2000 weibz Created
\**************************************************************************/
#include "private.h"
#include "resource.h"
#include <initguid.h>
#include "SoftKbd.h"
#include "SoftKbdc.h"
#include "SoftkbdIMX.h"
#include "regimx.h"
#include "catutil.h"
#include "mui.h"
#include "immxutil.h"
#ifdef DEBUG
DWORD g_dwThreadDllMain = 0;
#endif
HINSTANCE g_hInst;
// used by COM server
HINSTANCE GetServerHINSTANCE(void)
{
return g_hInst;
}
BEGIN_COCLASSFACTORY_TABLE
DECLARE_COCLASSFACTORY_ENTRY(CLSID_SoftKbd, CSoftKbd, TEXT("SoftKbd Class"))
DECLARE_COCLASSFACTORY_ENTRY(CLSID_SoftkbdIMX, CSoftkbdIMX, TEXT("SoftKbdIMX Class"))
DECLARE_COCLASSFACTORY_ENTRY(CLSID_SoftkbdRegistry, CSoftkbdRegistry, TEXT("SoftKbdRegistry Class"))
END_COCLASSFACTORY_TABLE
const GUID c_guidProfile = { /* 0965500c-82f3-49c2-9f00-01c2feacaa0b */
0x0965500c,
0x82f3,
0x49c2,
{0x9f, 0x00, 0x01, 0xc2, 0xfe, 0xac, 0xaa, 0x0b}
};
const GUID c_guidProfileSym = { // b2a54871-05f6-4bfc-b97d-0fdf0cbfa57d
0xb2a54871,
0x05f6,
0x4bfc,
{0xb9, 0x7d, 0x0f, 0xdf, 0x0c, 0xbf, 0xa5, 0x7d}
};
extern REGTIPLANGPROFILE c_rgProf[] =
{
{0, &GUID_NULL, L"", L"", 0, 0}
};
//+---------------------------------------------------------------------------
//
// ProcessAttach
//
//----------------------------------------------------------------------------
BOOL ProcessAttach(HINSTANCE hInstance)
{
if (!g_cs.Init())
return FALSE;
CcshellGetDebugFlags();
Dbg_MemInit(TEXT("SOFTKBDIMX"), NULL);
g_hInst = hInstance;
MuiLoadResource(hInstance, TEXT("softkbd.dll"));
return TRUE;
}
//+---------------------------------------------------------------------------
//
// ProcessDettach
//
//----------------------------------------------------------------------------
void ProcessDettach(HINSTANCE hInstance)
{
MuiClearResource();
g_cs.Delete();
Dbg_MemUninit();
}
/////////////////////////////////////////////////////////////////////////////
// DLL Entry Point
extern "C"
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
BOOL bRet = TRUE;
#ifdef DEBUG
g_dwThreadDllMain = GetCurrentThreadId();
#endif
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
//
// Now real DllEntry point is _DllMainCRTStartup.
// _DllMainCRTStartup does not call our DllMain(DLL_PROCESS_DETACH)
// if our DllMain(DLL_PROCESS_ATTACH) fails.
// So we have to clean this up.
//
if (!ProcessAttach(hInstance))
{
ProcessDettach(hInstance);
bRet = FALSE;
}
break;
case DLL_THREAD_ATTACH:
break;
case DLL_PROCESS_DETACH:
ProcessDettach(hInstance);
break;
case DLL_THREAD_DETACH:
break;
}
#ifdef DEBUG
g_dwThreadDllMain = 0;
#endif
return bRet;
}
/////////////////////////////////////////////////////////////////////////////
// Used to determine whether the DLL can be unloaded by OLE
STDAPI DllCanUnloadNow(void)
{
return COMBase_DllCanUnloadNow();
}
/////////////////////////////////////////////////////////////////////////////
// Returns a class factory to create an object of the requested type
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
return COMBase_DllGetClassObject(rclsid, riid, ppv);
}
/////////////////////////////////////////////////////////////////////////////
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void)
{
HRESULT hr = E_FAIL;
TFInitLib();
// registers object, typelib and all interfaces in typelib
if (COMBase_DllRegisterServer() != S_OK)
goto Exit;
if (!RegisterTIP(g_hInst, CLSID_SoftkbdIMX, L"On-screen keyboard", c_rgProf))
goto Exit;
if ( FAILED(RegisterCategory(CLSID_SoftkbdIMX, GUID_TFCAT_TIP_HANDWRITING, CLSID_SoftkbdIMX)))
goto Exit;
hr = S_OK;
Exit:
TFUninitLib( );
return hr;
}
/////////////////////////////////////////////////////////////////////////////
// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void)
{
HRESULT hr=E_FAIL;
TFInitLib();
if (COMBase_DllUnregisterServer() != S_OK)
goto Exit;
if (FAILED(UnregisterCategory(CLSID_SoftkbdIMX, GUID_TFCAT_TIP_HANDWRITING, CLSID_SoftkbdIMX)))
goto Exit;
if (!UnregisterTIP(CLSID_SoftkbdIMX))
goto Exit;
hr=S_OK;
Exit:
TFUninitLib( );
return hr;
}