客户要求系统中加入五笔输入法,而PB中只带有拼音,要怎样才能添加第三方的输入法。
另外,在哪里可以下载到WinCE4。2上运行的五笔输入法软件。
还有就是系统运行时怎样切换输入法,如果有多种输入法存在,好像只能在中英文之间切换。
------解决方案--------------------
如果能加入五笔输入法那是相当不错了.
------解决方案--------------------
这种软件应该找专业公司定制吧
------解决方案--------------------
你要自己写输入法?!
只要按照wince的格式写,然后在注册进去就可以.
如果不自己写的话,就得去找别人做好的.然后再注册进去.
- C/C++ code
// HandWriting.cpp : Implementation of DLL Exports.// Note: Proxy/Stub Information// To build a separate proxy/stub DLL, // run nmake -f HandWritingps.mk in the project directory.#include "stdafx.h"#include "resource.h"#include "initguid.h"#include <commctrl.h>#include <aygshell.h>#include <sipapi.h>#include "dllmain.h"#include "HandWriting.h"#include "HandWriting_classfactory.h"#include "HandWriting_i.c"// constant strings that we use for registering the server#define PENINPUT TEXT("xx输入法")#define STRING_ONE TEXT("1")#define ICON_NAME TEXT("\\windows\\HandWriting.dll,0")#define EXEPATH TEXT("\\windows\\HandWriting.dll")DWORD g_dwObjectCount;HINSTANCE g_hInstDll;CComModule _Module;BEGIN_OBJECT_MAP(ObjectMap)END_OBJECT_MAP()/////////////////////////////////////////////////////////////////////////////// DLL Entry Pointextern "C" BOOL WINAPI DllMain(HANDLE hInstance, DWORD dwReason, LPVOID){ if (dwReason == DLL_PROCESS_ATTACH) { g_hInstDll = (HINSTANCE)hInstance; _Module.Init(ObjectMap, (HINSTANCE)hInstance); } else if (dwReason == DLL_PROCESS_DETACH) { _Module.Term(); } return TRUE; }/////////////////////////////////////////////////////////////////////////////// Used to determine whether the DLL can be unloaded by OLESTDAPI DllCanUnloadNow(void){ if( !g_dwObjectCount ) { return NOERROR; } return S_FALSE;}/////////////////////////////////////////////////////////////////////////////// Returns a class factory to create an object of the requested typeSTDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv){ HRESULT hr; CClassFactory *pClassFactory = new CClassFactory( rclsid ); if( pClassFactory ) { hr = pClassFactory->QueryInterface( riid, ppv ); RELEASE( pClassFactory ); return hr; } return E_OUTOFMEMORY;}// add all the registry entries needed to make this CLSID into a SIPHRESULT RegisterAClsid(LPTSTR pszClsid){ LONG lRC; HKEY hClsidKey; HKEY hGuidKey; HKEY hRegKey; DWORD dwDisposition; lRC = RegOpenKey(HKEY_CLASSES_ROOT, TEXT("CLSID"), &hClsidKey); if (ERROR_SUCCESS != lRC) { OutputDebugString(TEXT("Failed to create the CLSID key")); return E_FAIL; } // create the base key for the OLE object under clsid lRC = RegCreateKeyEx(hClsidKey, pszClsid, 0, TEXT("REG_SZ"), 0, KEY_WRITE, NULL, &hGuidKey, &dwDisposition); if (ERROR_SUCCESS != lRC) { RegCloseKey(hClsidKey); return E_FAIL; } // now set the named value under this key lRC = RegSetValueEx(hGuidKey, NULL, 0, REG_SZ, (BYTE*) PENINPUT, sizeof(TCHAR)*(1+_tcslen(PENINPUT))); if (ERROR_SUCCESS != lRC) { RegCloseKey(hGuidKey); RegCloseKey(hClsidKey); return E_FAIL; } // now, create the standard OLE server key lRC = RegCreateKeyEx(hGuidKey, TEXT("InprocServer32"), 0, TEXT("REG_SZ"), 0, KEY_WRITE, NULL, &hRegKey, &dwDisposition); if (ERROR_SUCCESS != lRC) { RegCloseKey(hGuidKey); RegCloseKey(hClsidKey); return E_FAIL; } // now set the named value under this key lRC = RegSetValueEx(hRegKey, NULL, 0, REG_SZ, (BYTE*) EXEPATH, sizeof(TCHAR)*(1+_tcslen(EXEPATH))); if (ERROR_SUCCESS != lRC) { RegCloseKey(hRegKey); RegCloseKey(hGuidKey); RegCloseKey(hClsidKey); return E_FAIL; } RegCloseKey(hRegKey); // this is the *only* thing which marks this as a sip lRC = RegCreateKeyEx(hGuidKey, TEXT("IsSIPInputMethod"), 0, TEXT("REG_SZ"), 0, KEY_WRITE, NULL, &hRegKey, &dwDisposition); if (ERROR_SUCCESS != lRC) { RegCloseKey(hGuidKey); RegCloseKey(hClsidKey); return E_FAIL; } // now set the named value under this key lRC = RegSetValueEx(hRegKey, NULL, 0, REG_SZ, (BYTE*) STRING_ONE, sizeof(TCHAR)*(1+_tcslen(STRING_ONE))); if (ERROR_SUCCESS != lRC) { RegCloseKey(hRegKey); RegCloseKey(hGuidKey); RegCloseKey(hClsidKey); return E_FAIL; } RegCloseKey(hRegKey); // this controls the icon we see in the sip menu lRC = RegCreateKeyEx(hGuidKey, TEXT("DefaultIcon"), 0, TEXT("REG_SZ"), 0, KEY_WRITE, NULL, &hRegKey, &dwDisposition); if (ERROR_SUCCESS != lRC) { RegCloseKey(hGuidKey); RegCloseKey(hClsidKey); return E_FAIL; } // now set the named value under this key lRC = RegSetValueEx(hRegKey, NULL, 0, REG_SZ, (BYTE*) ICON_NAME, sizeof(TCHAR)*(1+_tcslen(ICON_NAME))); if (ERROR_SUCCESS != lRC) { RegCloseKey(hRegKey); RegCloseKey(hGuidKey); RegCloseKey(hClsidKey); return E_FAIL; } RegCloseKey(hRegKey); RegCloseKey(hGuidKey); RegCloseKey(hClsidKey); return S_OK;}/////////////////////////////////////////////////////////////////////////////// DllRegisterServer - Adds entries to the system registrySTDAPI DllRegisterServer(void){ HRESULT hr = S_OK; hr = RegisterAClsid(TEXT("{42429695-AE04-11D0-A4F8-00AA00A749B9}")); return hr;}/////////////////////////////////////////////////////////////////////////////// DllUnregisterServer - Removes entries from the system registrySTDAPI DllUnregisterServer(void){ _Module.UnregisterServer(); return S_OK;}