⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hwrecognizer.cpp

📁 简单的输入法 各位多多指教 简单的输入法 各位多多指教
💻 CPP
字号:
// HWRecognizer.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "IMWnd.h"
#include "InputMethod.h"
#include "ClassFactory.h"
#include "Common.h"

long g_DllCnt = 0;                   // Global DLL reference count
   
extern "C" {
HINSTANCE g_hInst;                     // DLL instance handle
}

// GUID defines for  input method.  Create a new one with GUIDGEN.
/*
const GUID CLSID_HWXRecognizer = { 0xc8311f61, 0x12df,0x4107,{0xb5,0xea,0xb0,0xb0,0xd5,0x5c,0xec,0x50}};
const TCHAR szCLSIDHWXRecognizer[] = TEXT ("{C8311F61-12DF-4107-B5EA-B0B0D55CEC50}");
*/

/*
const GUID CLSID_HWXRecognizer = { 0x9E06C6B8, 0xFE4D,0x4206,{0x9A,0x5B,0x6E,0x4C,0x1B,0x8B,0x6A,0xD7}};
const TCHAR szCLSIDHWXRecognizer[] = TEXT ("{9E06C6B8-FE4D-4206-9A5B-6E4C1B8B6AD7}");
*/


const GUID CLSID_HWXRecognizer = { 0x0CA0AAFA, 0xE999,0x4993,{0x9A,0xAA,0x4F,0xB0,0xEC,0xE2,0x8A,0x8D}};
const TCHAR szCLSIDHWXRecognizer[] = TEXT ("{0CA0AAFA-E999-4993-9AAA-4FB0ECE28A8D}");

const TCHAR szFriendlyName[] = TEXT ("Numeric Keypad");
   
   
//======================================================================
// DllMain - DLL initialization entry point
//
BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{	
	g_hInst = (HINSTANCE)hModule;
	
	WRITELOG("Get in the DllMain()!");
    
	return TRUE;
}

//======================================================================
// DllGetClassObject - Exported function called to get pointer to 
// Class factory object.
//
STDAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID *ppv) 
{
    CClassFactory *pcf;
    HRESULT hr;
   
	
    // See if caller wants us.
    if (IsEqualCLSID (rclsid, CLSID_HWXRecognizer)) 
	{   
        // Create IClassFactory object.
        pcf = new CClassFactory(&g_DllCnt,g_hInst);
        if (pcf == NULL)
            return E_OUTOFMEMORY;
   
        // Call class factory's query interface method.
        hr = pcf->QueryInterface (riid, ppv);
        // This will cause an obj delete unless interface found.
        pcf->Release();
		
		WRITELOG("Oh, created IClassFactory object!");

        return hr;
    }
	
	WRITELOG("Sorry, ClassFactory object doesn't create");

    return CLASS_E_CLASSNOTAVAILABLE;
}
//======================================================================
// DllCanUnloadNow - Exported function called when DLL can unload
//
STDAPI DllCanUnloadNow () 
{
   
    if (g_DllCnt)
	{
		WRITELOG("Dll unload now!");
        return S_FALSE;
    }
	return S_OK;
}
//======================================================================
// DllRegisterServer - Exported function called to register the server
//
STDAPI DllRegisterServer () 
{
    TCHAR szName[MAX_PATH+2];
    TCHAR szTmp[128];
    DWORD dwDisp;
    HKEY hKey, hSubKey;
    int rc;
   
    GetModuleFileName (g_hInst, szName, sizeof (szName));
    // Open the key.
    wsprintf (szTmp, TEXT ("CLSID\\%s"), szCLSIDHWXRecognizer);
    rc = RegCreateKeyEx (HKEY_CLASSES_ROOT, szTmp, 0, TEXT(""), 
                         0, 0, NULL, &hKey, &dwDisp);
    if (rc != ERROR_SUCCESS)
        return E_FAIL;
    // Set the friendly name of the SIP.
    RegSetValueEx (hKey, TEXT (""), 0, REG_SZ, (PBYTE)szFriendlyName,
                        (lstrlen (szFriendlyName)+1) * sizeof (TCHAR));
   
    // Create subkeys.
    // Set the module name of the SIP.
    rc = RegCreateKeyEx (hKey, TEXT ("InProcServer32"), 0, TEXT(""), 
                         0, 0, NULL, &hSubKey, &dwDisp);
    rc = RegSetValueEx (hSubKey, TEXT (""), 0, REG_SZ, (PBYTE)szName,
                        (lstrlen (szName)+1) * sizeof (TCHAR));
    RegCloseKey (hSubKey);
   
    // Set the default icon of the server.
    RegCreateKeyEx (hKey, TEXT ("DefaultIcon"), 0, TEXT(""), 
                    0, 0, NULL, &hSubKey, &dwDisp);
    lstrcat (szName, TEXT (",0"));
    RegSetValueEx (hSubKey, TEXT (""), 0, REG_SZ, (PBYTE)szName,
                   (lstrlen (szName)+1) * sizeof (TCHAR));
    RegCloseKey (hSubKey);
   
    // Set the flag indicating this is a SIP.
    RegCreateKeyEx (hKey, TEXT ("IsSIPInputMethod"), 0, TEXT(""), 
                    0, 0, NULL, &hSubKey, &dwDisp);
    lstrcpy (szTmp, TEXT ("1"));
    RegSetValueEx (hSubKey, TEXT (""), 0, REG_SZ, (PBYTE)szTmp, 4);
    RegCloseKey (hSubKey);
   
    RegCloseKey (hKey);

	WRITELOG("DllRegisterServer is OK");

    return S_OK;
}
//======================================================================
// DllUnregisterServer - Exported function called to remove the server
// information from the registry
//
STDAPI DllUnregisterServer() 
{
    int rc;
    TCHAR szTmp[128];
   
    wsprintf (szTmp, TEXT ("CLSID\\%s"), szCLSIDHWXRecognizer);
    rc = RegDeleteKey (HKEY_CLASSES_ROOT, szTmp);
    if (rc == ERROR_SUCCESS)
	{
		WRITELOG("DllUnregisterServer is OK");
        return S_OK;
	}

	WRITELOG("DllUnregisterServer is FAILED");
    return E_FAIL;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -