前天因客户的需要,需要在WINCE6.0的系统中添加以色列语言的键盘到系统中,本以为是很简单的事情,因为之前在WINCE5.0下也有做过在系统中增加键盘的经历了,所需要的工作如下:
IF BSP_HEBREW
LargeKB.dll $(_FLATRELEASEDIR)\LargeKB.dll NK SHK
SmallKB.dll $(_FLATRELEASEDIR)\SmallKB.dll NK SHK
ENDIF BSP_HEBREW
在这里环境变量来根据项目需要是否在系统中包含这两个键盘。
IF BSP_HEBREW
;;;;;;;;;;;;;;;;;;;;;;;;;;add for largeKB;;;;;;;;;;;;;;;;;;;;;;;
[HKEY_CLASSES_ROOT\CLSID\{A523DFC7-1A7E-4AF6-991A-510E75847929}]
@="LargeKB"
[HKEY_CLASSES_ROOT\CLSID\{A523DFC7-1A7E-4AF6-991A-510E75847929}\DefaultIcon]
@="\\windows\\LargeKB.dll"
[HKEY_CLASSES_ROOT\CLSID\{A523DFC7-1A7E-4AF6-991A-510E75847929}\InprocServer32]
@="\\windows\\LargeKB.dll"
[HKEY_CLASSES_ROOT\CLSID\{A523DFC7-1A7E-4AF6-991A-510E75847929}\IsSIPInputMethod]
@="1"
;;;;;;;;;;;;;;;;;;;;;;;;;add for smallKB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[HKEY_CLASSES_ROOT\CLSID\{A523DFC7-1A7E-4AF6-991A-510E75847729}]
@="SmallKB"
[HKEY_CLASSES_ROOT\CLSID\{A523DFC7-1A7E-4AF6-991A-510E75847729}\DefaultIcon]
@="\\windows\\SmallKB.dll"
[HKEY_CLASSES_ROOT\CLSID\{A523DFC7-1A7E-4AF6-991A-510E75847729}\InprocServer32]
@="\\windows\\SmallKB.dll"
[HKEY_CLASSES_ROOT\CLSID\{A523DFC7-1A7E-4AF6-991A-510E75847729}\IsSIPInputMethod]
@="1"
ENDIF BSP_HEBREW
; SIP IM values
; Default keyboard initial delay and autorepeat
[HKEY_CURRENT_USER\ControlPanel\Keybd]
"InitialDelay"=dword:177
"RepeatRate"=dword:8
[HKEY_CLASSES_ROOT\CLSID\{42429667-ae04-11d0-a4f8-00aa00a749b9}]
@=LOC_KEYBOARD
"KBMode"=dword:5
[HKEY_CLASSES_ROOT\CLSID\{42429667-ae04-11d0-a4f8-00aa00a749b9}\InprocServer32]
@="\\windows\\msim.dll"
[HKEY_CLASSES_ROOT\CLSID\{42429667-ae04-11d0-a4f8-00aa00a749b9}\IsSIPInputMethod]
@="1"
[HKEY_CLASSES_ROOT\CLSID\{42429667-ae04-11d0-a4f8-00aa00a749b9}\DefaultIcon]
@="\\windows\\msim.dll,0"
比较之后知道我的platform.reg中上面的内容正确的,那问题可能会在哪里呢?通过msim.dll来找到keyboard在platorm.bib中相关内容如下:
; @CESYSGEN IF CE_MODULES_MSIM
msim.dll $(_FLATRELEASEDIR)\msim.dll NK SH
; @CESYSGEN ENDIF
经过比较才发现msim.dll后面对应的是SH,而不是SHK,发现这个问题后才忽然醒悟键盘是应用程序dll,不属于内核态,所以不能是SHK。就这样,把第1步中的SHK都改为SH后就正常使用那两个键盘了。