博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Input Method of Win32 System
阅读量:7118 次
发布时间:2019-06-28

本文共 3173 字,大约阅读时间需要 10 分钟。

花了些工夫后,我们终于能在WINCE里随时用HOT KEY切出中文输入法了。内容都在注册表里,不过需要翻译出来才能看破。这部分在WIN XP和WINCE里是基本一致的。

进到 [HKEY_CURRENT_USER \ Control Panel \ Input Method \ Hot Keys] 里面.

这里有到一堆数字00000010 ~ 00000012, 00000100等, 这些在WINCE HELP里能找到说明, 但最全的说明在wince500\public\common\sdk\inc\imm.h里

// Windows for Simplified Chinese Edition hot key ID from 0x10 - 0x2F

#define IME_CHOTKEY_FIRST   0x10
#define IME_CHOTKEY_IME_NONIME_TOGGLE           0x10
#define IME_CHOTKEY_SHAPE_TOGGLE                0x11
#define IME_CHOTKEY_SYMBOL_TOGGLE               0x12
#define IME_CHOTKEY_LAST   0x2f
// Windows for Japanese Edition hot key ID from 0x30 - 0x4F
#define IME_JHOTKEY_FIRST   0x30
#define IME_JHOTKEY_CLOSE_OPEN                  0x30
#define IME_JHOTKEY_LAST   0x4f
// Windows for Korean Edition hot key ID from 0x50 - 0x6F
#define IME_KHOTKEY_FIRST   0x50
#define IME_KHOTKEY_SHAPE_TOGGLE                0x50
#define IME_KHOTKEY_HANJACONVERT                0x51
#define IME_KHOTKEY_ENGLISH                     0x52
#define IME_KHOTKEY_LAST   0x6f
// Windows for Traditional Chinese Edition hot key ID from 0x70 - 0x8F
#define IME_THOTKEY_FIRST   0x70
#define IME_THOTKEY_IME_NONIME_TOGGLE           0x70
#define IME_THOTKEY_SHAPE_TOGGLE                0x71
#define IME_THOTKEY_SYMBOL_TOGGLE               0x72
#define IME_THOTKEY_LAST   0x8f
// direct switch hot key ID from 0x100 - 0x11F
#define IME_HOTKEY_DSWITCH_FIRST                0x100
#define IME_HOTKEY_DSWITCH_LAST                 0x11F
// IME private hot key from 0x200 - 0x21F
#define IME_HOTKEY_PRIVATE_FIRST                0x200
#define IME_ITHOTKEY_RESEND_RESULTSTR           0x200
#define IME_ITHOTKEY_PREVIOUS_COMPOSITION       0x201
#define IME_ITHOTKEY_UISTYLE_TOGGLE             0x202
#define IME_HOTKEY_PRIVATE_LAST                 0x21F

这样就很显然了. XP里也一样,10就是切出中文输入法, 11是全角/半角字切换, 12是标点符号的全半角切换. 比如我们要在CE里做启动/关闭中文简体输入法的热键,那么它就在Hot Keys\00000010下面. 点进去后有三个值

VK = 32

KM = 49154
Ime = 3758163972

缩写,十进制数, 都是蒙人的东西. 对照在WIN XP下, 这三个值就是

Virtual Key = 20 00 00 00

Key Modifiers = 02 C0 00 00
Target IME = 00 00 00 00

这比CE里的好理解多了. 首先VK = 0x20 就是SPACE键. Target IME = 3758163972 = 0xE0010804. 0804让我想到了简体中文的LANGUAGE ID. 在CE的注册表里搜一下, 位于[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Layouts]下面,有e0010804和00000409两个项, 很显然0409就是英文的Language ID. 那么从项里面的内容来看, e0010804代表的就是中文全拼输入法, 它将调用chsime03.dll, 键盘布局0409为标准键盘. 00000409就是普通的英文输入了,没有输入法, 就用的kbdmouse.dll.

那么Key Modifiers怎么理解呢?  仍然是在public\common\sdk\inc\imm.h里找到了这张表

// the modifiers of hot key

#define MOD_ALT                         0x0001
#define MOD_CONTROL                     0x0002
#define MOD_SHIFT                       0x0004
#define MOD_LEFT                        0x8000
#define MOD_RIGHT                       0x4000
#define MOD_ON_KEYUP                    0x0800
#define MOD_IGNORE_ALL_MODIFIER         0x0400

所以KM的值是上面这几个值逻辑与的结果. 比如上面那个KM = 49154 = 0xC002 = MOD_LEFT | MOD_RIGHT | MOD_CONTROL .那么配合VK=0x20, 也就是说左边或右边任意一个CTRL键, 再同时按下SPACE键, 就实现了IME_CHOTKEY_IME_NONIME_TOGGLE的功能. 即切换出简体中文输入法.

下面的其他项都可以类似地理解了。

另外有个地方在以后也许会有用 ms-help://MS.WindowsCE.500/wceinternational5/html/wce50grfInputMethodManagerIMMFunctions.htm 也就是加入Imput Method Managers组件后,可以把这些函数提供给APP用. 浏览器移植中有一块就是浏览器和操作系统输入法的接口函数.

最后顺带讲一下CE上这个猥琐的微软全拼输入法怎么用. 比如现在要输入"傻", 那么首先按CTRL+SPACE切出中文输入法, 然后输入"sha", 再按SPACE. 这时候出现下划虚线的"沙"字, 然后我们得按一下左箭头, 这时就出来选字的框了. 可"傻"不在第一列里, 所以得按下PAGE_DOWN, 然后再按"2"完成.

好吧, 傻了吧? 这只是标准键盘上的操作, 如果在遥控器上

"7" * 5 = S
"4" * 3 = H
"2" * 2 = A
选定 * 1
左箭头 * 1
快进 * 1
"2" * 1
-------------
总计 按遥控器14下

本文转自Walzer博客园博客,原文链接:http://www.cnblogs.com/walzer/archive/2006/02/05/325603.html,如需转载请自行联系原作者

你可能感兴趣的文章
Percona XtraBackup 增量备份
查看>>
358. Rearrange String k Distance Apart
查看>>
防止序列为空
查看>>
golang的一个丑陋实现
查看>>
Elixir 函数编程的几个基本特性
查看>>
谜之RxJava (三)update 2 —— subscribeOn 和 observeOn 的区别
查看>>
将 NCR(Numeric Character Reference) 字符转换为真实字符的方法
查看>>
orm2 中文文档
查看>>
什么是实时应用程序自我保护(RASP)?
查看>>
从UIAlertView、UIActionSheet到UIAlertController
查看>>
[LeetCode]Number of Islands II
查看>>
深入分析JavaWeb Item8 -- HttpServletResponse常见应用
查看>>
Uber 开源深度学习分布训练库 Petastorm
查看>>
5G将如何影响物联网
查看>>
阿里云容器服务Kubernetes实践系列 - Ingress篇
查看>>
mysql审计
查看>>
Data Structure_Visualization
查看>>
浅谈IPsec的工作原理及优缺点
查看>>
利用java实现发送邮件
查看>>
python 模板中的语法
查看>>