[Imm]Imm API学习笔记——GCS常数

[Imm]Imm API学习笔记——GCS常数File:      Imm_GCS.txt
Name:      [Imm]Imm API学习笔记——GCS常数
Author:    zyl910
Blog:      http://blog.csdn.net/zyl910/
Version:   V1.0
Updata:    2006-6-2

引言:MSDN中关于Imm的说明太简略了,而且英文的看不太懂。为此我特地编写了一些小程序测试Imm API,终于被我搞清楚了。

  GCS常数是什么东西?当你在输入法打开状态时敲键盘,输入法会尝试将你输入的内容转为中文字符(这个过程称为Composition——组字),然后向窗口发送WM_IME_COMPOSITION通知当前的组字状态(lParam参数),然后用户可以通过调用ImmGetCompositionString消息得到详细的组字信息。

  注意ImmGetCompositionString的dwBufLen参数的单位永远是字节,其返回值也是一般是字节。

  GCS常数如下:
[0x0001]GCS_COMPREADSTR: 当前输入串。Retrieves or updates the reading string of the current composition.
[0x0002]GCS_COMPREADATTR: 当前输入串的属性。Retrieves or updates the attributes of the reading string of the current composition.
[0x0004]GCS_COMPREADCLAUSE: 当前输入串的子句信息。Retrieves or updates the clause information of the reading string of the composition string.
[0x0008]GCS_COMPSTR: 组字串。Retrieves or updates the current composition string.
[0x0010]GCS_COMPATTR: 组字串的属性。Retrieves or updates the attribute of the composition string.
[0x0020]GCS_COMPCLAUSE: 组字串的子句信息。Retrieves or updates clause information of the composition string.
[0x0080]GCS_CURSORPOS: 组字串中的光标位置。Retrieves or updates the cursor position in composition string.
[0x0100]GCS_DELTASTART: 组字串中被改变内容的起始位置。Retrieves or updates the starting position of any changes in composition string.
[0x0200]GCS_RESULTREADSTR: 返回 输入串。Retrieves or updates the reading string.
[0x0400]GCS_RESULTREADCLAUSE: 返回 输入串的子句信息。Retrieves or updates clause information of the reading string.
[0x0800]GCS_RESULTSTR: 返回 结果串。Retrieves or updates the string of the composition result.
[0x1000]GCS_RESULTCLAUSE: 返回 结果串的子句信息。Retrieves or updates clause information of the result string.
[0x2000]CS_INSERTCHAR: 该在当前输入位置插入一个字符。The wParam composition character should be inserted at the current insertion point. An application should display the composition character if it processes this message.
[0x4000]CS_NOMOVECARET: 处理该插入字符时不要移动插入符。The application must not move the caret position as a result of processing the message. For example, if an IME specifies a combination of CS_INSERTCHAR and CS_NOMOVECARET, the application should insert the specified character at the current caret position but should not move caret to the next position. A subsequent WM_IME_COMPOSITION message with GCS_RESULTSTR will replace this character.

  先讲简单的。
CS_INSERTCHAR、CS_NOMOVECARET: CS_INSERTCHAR是指输入法要求窗口在当前输入位置插入一个字符,CS_NOMOVECARET是指在该过程中不要移动插入符(caret,文本光标所在位置)。
GCS_CURSORPOS: 组字串中的光标位置。比如在微软拼音中,我们输入的内容直接显示在窗口上,然后可以用左右方向键定位需要更改的字符,该常数返回的就是这个位置。注意它是ImmGetCompositionString的返回值,而不是在缓冲区中。
GCS_DELTASTART: 组字串中被改变内容的起始位置。注意它是ImmGetCompositionString的返回值,而不是在缓冲区中。

  现在开始面对这堆奇怪的常数:
GCS_COMPREADSTR
GCS_COMPREADATTR
GCS_COMPREADCLAUSE
GCS_COMPSTR
GCS_COMPATTR
GCS_COMPCLAUSE
GCS_RESULTREADSTR
GCS_RESULTREADCLAUSE
GCS_RESULTSTR
GCS_RESULTCLAUSE

  将它们的名字拆开,分成两类。
  一类(前缀)是:
COMPREAD: 输入串,键盘敲入的字符串。如:zhongwen
COMP: 组字串,当前的组字的字符串。如:中wen
RESULTREAD: 返回时的输入串,从来没见哪个输入法用过。
RESULT: 返回组字结果串。如:中文

  另一类(后缀)是:
STR: 字符串数据。注意ANSI与Unicode字符串的区别。
ATTR: Byte数组,每个字符编码单元的属性(“ATTR_”开头的常数)。
CLAUSE: DWORD数组,分别表示每个字句的字符开始位置。一般情况下是两个DWORD,其中一个是串开始位置(0),另一个是串结束位置。

  “ATTR_”开头的常数:
[0]ATTR_INPUT: Character being entered by the user. It is yet to be converted by the IME.
[1]ATTR_TARGET_CONVERTED: Character is an error character and cannot be converted by the IME. For example, some consonants cannot be put together.
[2]ATTR_CONVERTED: Character converted by the IME. The user has selected this character and the IME has converted it.
[3]ATTR_TARGET_NOTCONVERTED: A converted character. The IME has already converted this character.
[4]ATTR_INPUT_ERROR: Character being converted. The user has selected this character but the IME has not yet converted it. 
[5]ATTR_FIXEDCONVERTED: Characters that will not be converted. The IME will not convert these characters anymore.


  理论上它们是这样的意思,但实际上每种输出法都有点细微区别,具体测试结果如下:


微软拼音
~~~~~~~~

  以下是使用微软拼音2003输入“zhongwen”的效果:

#0226
hW: 002704B4
uM: 0000010F{WM_IME_COMPOSITION
wP: 0000D6D0
lP: 000001B8
cs: 000001B8
	[Enum]Composition String
	00000008: GCS_COMPSTR
	00000010: GCS_COMPATTR
	00000020: GCS_COMPCLAUSE
	00000080: GCS_CURSORPOS
	00000100: GCS_DELTASTART
00000008:
	cbDataA:	5
	byDataA:	D6 D0 77 65 6E
	cbDataW:	8
	byDataW:	2D 4E 77 00 65 00 6E 00

00000010:
	cbDataA:	5
	byDataA:	00 00 03 03 03
	cbDataW:	4
	byDataW:	00 03 03 03

00000020:
	cbDataA:	12
	byDataA:	00 00 00 00 02 00 00 00 05 00 00 00
	cbDataW:	12
	byDataW:	00 00 00 00 01 00 00 00 04 00 00 00

00000080:
	VarA:	5(00000005)
	VarW:	4(00000004)

00000100:
	VarA:	0(00000000)
	VarW:	0(00000000)

00000200:
	cbDataA:	0
	cbDataW:	0


#0229
hW: 002704B4
uM: 0000010F{WM_IME_COMPOSITION
wP: 0000D6D0
lP: 000001B8
cs: 000001B8
	[Enum]Composition String
	00000008: GCS_COMPSTR
	00000010: GCS_COMPATTR
	00000020: GCS_COMPCLAUSE
	00000080: GCS_CURSORPOS
	00000100: GCS_DELTASTART
00000008:
	cbDataA:	4
	byDataA:	D6 D0 CE C4
	cbDataW:	4
	byDataW:	2D 4E 87 65

00000010:
	cbDataA:	4
	byDataA:	00 00 00 00
	cbDataW:	2
	byDataW:	00 00

00000020:
	cbDataA:	8
	byDataA:	00 00 00 00 04 00 00 00
	cbDataW:	8
	byDataW:	00 00 00 00 02 00 00 00

00000080:
	VarA:	4(00000004)
	VarW:	2(00000002)

00000100:
	VarA:	0(00000000)
	VarW:	0(00000000)

00000200:
	cbDataA:	0
	cbDataW:	0


#0235
hW: 002704B4
uM: 0000010F{WM_IME_COMPOSITION
wP: 0000D6D0
lP: 00001C00
cs: 00001C00
	[Enum]Composition String
	00000400: GCS_RESULTREADCLAUSE
	00000800: GCS_RESULTSTR
	00001000: GCS_RESULTCLAUSE
00000200:
	cbDataA:	0
	cbDataW:	0

00000400:
	cbDataA:	8
	byDataA:	00 00 00 00 02 00 00 00
	cbDataW:	8
	byDataW:	00 00 00 00 02 00 00 00

00000800:
	cbDataA:	4
	byDataA:	D6 D0 CE C4
	cbDataW:	4
	byDataW:	2D 4E 87 65

00001000:
	cbDataA:	8
	byDataA:	00 00 00 00 04 00 00 00
	cbDataW:	8
	byDataW:	00 00 00 00 02 00 00 00


紫光拼音
~~~~~~~~

  紫光拼音没有严格按照IME标准,在输入过程中不会发送WM_IME_COMPOSITION、WM_IME_NOTIFY消息,只是在最后确认时发送WM_IME_COMPOSITION消息
  以下是使用紫光拼音3.0输入“zhongwen”的效果:

#0929
hW: 002704B4
uM: 0000010F{WM_IME_COMPOSITION
wP: 00000000
lP: 00000800
cs: 00000800
	[Enum]Composition String
	00000800: GCS_RESULTSTR
00000200:
	cbDataA:	0
	cbDataW:	0

00000800:
	cbDataA:	4
	byDataA:	D6 D0 B9 FA
	cbDataW:	4
	byDataW:	2D 4E FD 56


  输入过程中的消息:

#0899: 00000050{WM_INPUTLANGCHANGEREQUEST	00000001	E0200804
#0900:     00000282{WM_IME_NOTIFY       	00000001	00000000
#0901:     00000282{WM_IME_NOTIFY       	00000007	00000000
#0902:     00000282{WM_IME_NOTIFY       	0000000B	00000000
#0903:     00000282{WM_IME_NOTIFY       	00000002	00000000
#0904:         00000282{WM_IME_NOTIFY       	0000000B	00000000
#0905:     00000051{WM_INPUTLANGCHANGE  	00000086	E0200804
#0906:         00000282{WM_IME_NOTIFY       	0000000A	00000000
#0907: 00000105{WM_SYSKEYUP         	00000036	E0070001
#0908: 00000101{WM_KEYUP            	00000012	C0380001
#0909: 00000101{WM_KEYUP            	00000010	C02A0001
#0910: 00000100{WM_KEYDOWN          	000000E5	002C0001
#0911: 0000010D{WM_IME_STARTCOMPOSITION	00000000	00000000
#0912: 00000101{WM_KEYUP            	0000005A	C02C0001
#0913: 00000100{WM_KEYDOWN          	000000E5	00230001
#0914: 00000101{WM_KEYUP            	00000048	C0230001
#0915: 00000100{WM_KEYDOWN          	000000E5	00180001
#0916: 00000101{WM_KEYUP            	0000004F	C0180001
#0917: 00000100{WM_KEYDOWN          	000000E5	00310001
#0918: 00000101{WM_KEYUP            	0000004E	C0310001
#0919: 00000100{WM_KEYDOWN          	000000E5	00220001
#0920: 00000101{WM_KEYUP            	00000047	C0220001
#0921: 00000100{WM_KEYDOWN          	000000E5	00220001
#0922: 00000100{WM_KEYDOWN          	000000E5	00160001
#0923: 00000101{WM_KEYUP            	00000047	C0220001
#0924: 00000101{WM_KEYUP            	00000055	C0160001
#0925: 00000100{WM_KEYDOWN          	000000E5	00180001
#0926: 00000101{WM_KEYUP            	0000004F	C0180001
#0927: 00000100{WM_KEYDOWN          	000000E5	00390001
#0928: 0000010E{WM_IME_ENDCOMPOSITION	00000000	00000000
#0929: 0000010F{WM_IME_COMPOSITION  	00000000	00000800
#0930:     00000286{WM_IME_CHAR         	0000D6D0	00000001
#0931:     00000286{WM_IME_CHAR         	0000B9FA	00000001
#0932: 0000010E{WM_IME_ENDCOMPOSITION	00000000	00000000
#0933: 00000102{WM_CHAR             	000000D6	00000001
#0934: 00000102{WM_CHAR             	000000D0	00000000
#0935:     00000282{WM_IME_NOTIFY       	0000000B	00000000
#0936: 00000102{WM_CHAR             	000000B9	00000001
#0937: 00000102{WM_CHAR             	000000FA	00000000
#0938:     00000282{WM_IME_NOTIFY       	0000000B	00000000
#0939: 00000101{WM_KEYUP            	00000020	C0390001
#0940: 00000008{WM_KILLFOCUS        	007E04BA	00000000
#0941: 00000281{WM_IME_SETCONTEXT   	00000000	C000000F
#0942: 0000010E{WM_IME_ENDCOMPOSITION	00000000	00000000




智能ABC
~~~~~~~

  以下是使用智能ABC输入“zhongwen”的效果:

#0316
hW: 002704B4
uM: 0000010F{WM_IME_COMPOSITION
wP: 00000000
lP: 000001BF
cs: 000001BF
	[Enum]Composition String
	00000001: GCS_COMPREADSTR
	00000002: GCS_COMPREADATTR
	00000004: GCS_COMPREADCLAUSE
	00000008: GCS_COMPSTR
	00000010: GCS_COMPATTR
	00000020: GCS_COMPCLAUSE
	00000080: GCS_CURSORPOS
	00000100: GCS_DELTASTART
00000001:
	cbDataA:	8
	byDataA:	7A 68 6F 6E 67 77 65 6E
	cbDataW:	16
	byDataW:	7A 00 68 00 6F 00 6E 00 67 00 77 00 65 00 6E 00

00000002:
	cbDataA:	8
	byDataA:	01 01 01 01 01 01 01 01
	cbDataW:	8
	byDataW:	01 01 01 01 01 01 01 01

00000004:
	cbDataA:	8
	byDataA:	00 00 00 00 08 00 00 00
	cbDataW:	8
	byDataW:	00 00 00 00 08 00 00 00

00000008:
	cbDataA:	8
	byDataA:	7A 68 6F 6E 67 77 65 6E
	cbDataW:	16
	byDataW:	7A 00 68 00 6F 00 6E 00 67 00 77 00 65 00 6E 00

00000010:
	cbDataA:	8
	byDataA:	01 01 01 01 01 01 01 01
	cbDataW:	8
	byDataW:	01 01 01 01 01 01 01 01

00000020:
	cbDataA:	8
	byDataA:	00 00 00 00 08 00 00 00
	cbDataW:	8
	byDataW:	00 00 00 00 08 00 00 00

00000080:
	VarA:	8(00000008)
	VarW:	8(00000008)

00000100:
	VarA:	0(00000000)
	VarW:	0(00000000)

00000200:
	cbDataA:	0
	cbDataW:	0

#0322
hW: 002704B4
uM: 0000010F{WM_IME_COMPOSITION
wP: 00000000
lP: 000001BF
cs: 000001BF
	[Enum]Composition String
	00000001: GCS_COMPREADSTR
	00000002: GCS_COMPREADATTR
	00000004: GCS_COMPREADCLAUSE
	00000008: GCS_COMPSTR
	00000010: GCS_COMPATTR
	00000020: GCS_COMPCLAUSE
	00000080: GCS_CURSORPOS
	00000100: GCS_DELTASTART
00000001:
	cbDataA:	5
	byDataA:	D6 D0 77 65 6E
	cbDataW:	8
	byDataW:	2D 4E 77 00 65 00 6E 00

00000002:
	cbDataA:	5
	byDataA:	01 01 01 01 01
	cbDataW:	4
	byDataW:	01 01 01 01

00000004:
	cbDataA:	8
	byDataA:	00 00 00 00 05 00 00 00
	cbDataW:	8
	byDataW:	00 00 00 00 04 00 00 00

00000008:
	cbDataA:	5
	byDataA:	D6 D0 77 65 6E
	cbDataW:	8
	byDataW:	2D 4E 77 00 65 00 6E 00

00000010:
	cbDataA:	5
	byDataA:	01 01 01 01 01
	cbDataW:	4
	byDataW:	01 01 01 01

00000020:
	cbDataA:	8
	byDataA:	00 00 00 00 05 00 00 00
	cbDataW:	8
	byDataW:	00 00 00 00 04 00 00 00

00000080:
	VarA:	5(00000005)
	VarW:	4(00000004)

00000100:
	VarA:	0(00000000)
	VarW:	0(00000000)

00000200:
	cbDataA:	0
	cbDataW:	0

#0337
hW: 002704B4
uM: 0000010F{WM_IME_COMPOSITION
wP: 00000000
lP: 000001BF
cs: 000001BF
	[Enum]Composition String
	00000001: GCS_COMPREADSTR
	00000002: GCS_COMPREADATTR
	00000004: GCS_COMPREADCLAUSE
	00000008: GCS_COMPSTR
	00000010: GCS_COMPATTR
	00000020: GCS_COMPCLAUSE
	00000080: GCS_CURSORPOS
	00000100: GCS_DELTASTART
00000001:
	cbDataA:	4
	byDataA:	D6 D0 CE CA
	cbDataW:	4
	byDataW:	2D 4E EE 95

00000002:
	cbDataA:	4
	byDataA:	01 01 01 01
	cbDataW:	2
	byDataW:	01 01

00000004:
	cbDataA:	8
	byDataA:	00 00 00 00 04 00 00 00
	cbDataW:	8
	byDataW:	00 00 00 00 02 00 00 00

00000008:
	cbDataA:	4
	byDataA:	D6 D0 CE CA
	cbDataW:	4
	byDataW:	2D 4E EE 95

00000010:
	cbDataA:	4
	byDataA:	01 01 01 01
	cbDataW:	2
	byDataW:	01 01

00000020:
	cbDataA:	8
	byDataA:	00 00 00 00 04 00 00 00
	cbDataW:	8
	byDataW:	00 00 00 00 02 00 00 00

00000080:
	VarA:	4(00000004)
	VarW:	2(00000002)

00000100:
	VarA:	0(00000000)
	VarW:	0(00000000)

00000200:
	cbDataA:	0
	cbDataW:	0

#0341
hW: 002704B4
uM: 0000010F{WM_IME_COMPOSITION
wP: 00000000
lP: 00001FBF
cs: 00001FBF
	[Enum]Composition String
	00000001: GCS_COMPREADSTR
	00000002: GCS_COMPREADATTR
	00000004: GCS_COMPREADCLAUSE
	00000008: GCS_COMPSTR
	00000010: GCS_COMPATTR
	00000020: GCS_COMPCLAUSE
	00000080: GCS_CURSORPOS
	00000100: GCS_DELTASTART
	00000200: GCS_RESULTREADSTR
	00000400: GCS_RESULTREADCLAUSE
	00000800: GCS_RESULTSTR
	00001000: GCS_RESULTCLAUSE
00000001:
	cbDataA:	0
	cbDataW:	0

00000002:
	cbDataA:	0
	cbDataW:	0

00000004:
	cbDataA:	0
	cbDataW:	0

00000008:
	cbDataA:	0
	cbDataW:	0

00000010:
	cbDataA:	0
	cbDataW:	0

00000020:
	cbDataA:	0
	cbDataW:	0

00000080:
	VarA:	0(00000000)
	VarW:	0(00000000)

00000100:
	VarA:	0(00000000)
	VarW:	0(00000000)

00000200:
	cbDataA:	0
	cbDataW:	0

00000400:
	cbDataA:	0
	cbDataW:	0

00000800:
	cbDataA:	4
	byDataA:	D6 D0 CE C4
	cbDataW:	4
	byDataW:	2D 4E 87 65

00001000:
	cbDataA:	0
	cbDataW:	0


全拼
~~~~
  以下是使用全拼输入“zhongwen”的效果:

#0434
hW: 002704B4
uM: 0000010F{WM_IME_COMPOSITION
wP: 0000006F
lP: 000001BF
cs: 000001BF
	[Enum]Composition String
	00000001: GCS_COMPREADSTR
	00000002: GCS_COMPREADATTR
	00000004: GCS_COMPREADCLAUSE
	00000008: GCS_COMPSTR
	00000010: GCS_COMPATTR
	00000020: GCS_COMPCLAUSE
	00000080: GCS_CURSORPOS
	00000100: GCS_DELTASTART
00000001:
	cbDataA:	8
	byDataA:	7A 68 6F 6E 67 67 75 6F
	cbDataW:	16
	byDataW:	7A 00 68 00 6F 00 6E 00 67 00 67 00 75 00 6F 00

00000002:
	cbDataA:	8
	byDataA:	01 01 01 01 01 01 01 01
	cbDataW:	8
	byDataW:	01 01 01 01 01 01 01 01

00000004:
	cbDataA:	0
	cbDataW:	0

00000008:
	cbDataA:	8
	byDataA:	7A 68 6F 6E 67 67 75 6F
	cbDataW:	16
	byDataW:	7A 00 68 00 6F 00 6E 00 67 00 67 00 75 00 6F 00

00000010:
	cbDataA:	8
	byDataA:	01 01 01 01 01 01 01 01
	cbDataW:	8
	byDataW:	01 01 01 01 01 01 01 01

00000020:
	cbDataA:	0
	cbDataW:	0

00000080:
	VarA:	8(00000008)
	VarW:	8(00000008)

00000100:
	VarA:	7(00000007)
	VarW:	7(00000007)

00000200:
	cbDataA:	0
	cbDataW:	0


#0438
hW: 002704B4
uM: 0000010F{WM_IME_COMPOSITION
wP: 00000000
lP: 00001FBF
cs: 00001FBF
	[Enum]Composition String
	00000001: GCS_COMPREADSTR
	00000002: GCS_COMPREADATTR
	00000004: GCS_COMPREADCLAUSE
	00000008: GCS_COMPSTR
	00000010: GCS_COMPATTR
	00000020: GCS_COMPCLAUSE
	00000080: GCS_CURSORPOS
	00000100: GCS_DELTASTART
	00000200: GCS_RESULTREADSTR
	00000400: GCS_RESULTREADCLAUSE
	00000800: GCS_RESULTSTR
	00001000: GCS_RESULTCLAUSE
00000001:
	cbDataA:	0
	cbDataW:	0

00000002:
	cbDataA:	0
	cbDataW:	0

00000004:
	cbDataA:	0
	cbDataW:	0

00000008:
	cbDataA:	0
	cbDataW:	0

00000010:
	cbDataA:	0
	cbDataW:	0

00000020:
	cbDataA:	0
	cbDataW:	0

00000080:
	VarA:	0(00000000)
	VarW:	0(00000000)

00000100:
	VarA:	0(00000000)
	VarW:	0(00000000)

00000200:
	cbDataA:	0
	cbDataW:	0

00000400:
	cbDataA:	0
	cbDataW:	0

00000800:
	cbDataA:	4
	byDataA:	D6 D0 B9 FA
	cbDataW:	4
	byDataW:	2D 4E FD 56

00001000:
	cbDataA:	0
	cbDataW:	0


王码五笔
~~~~~~~~

  王码五笔在按完4个键之后自动发送GCS_RESULTSTR。
  以下是使用王码五笔86版输入“yygy”(“文”字)的效果:

#1125
hW: 002704B4
uM: 0000010F{WM_IME_COMPOSITION
wP: 00000067
lP: 000001BF
cs: 000001BF
	[Enum]Composition String
	00000001: GCS_COMPREADSTR
	00000002: GCS_COMPREADATTR
	00000004: GCS_COMPREADCLAUSE
	00000008: GCS_COMPSTR
	00000010: GCS_COMPATTR
	00000020: GCS_COMPCLAUSE
	00000080: GCS_CURSORPOS
	00000100: GCS_DELTASTART
00000001:
	cbDataA:	3
	byDataA:	79 79 67
	cbDataW:	6
	byDataW:	79 00 79 00 67 00

00000002:
	cbDataA:	3
	byDataA:	01 01 01
	cbDataW:	3
	byDataW:	01 01 01

00000004:
	cbDataA:	0
	cbDataW:	0

00000008:
	cbDataA:	3
	byDataA:	79 79 67
	cbDataW:	6
	byDataW:	79 00 79 00 67 00

00000010:
	cbDataA:	3
	byDataA:	01 01 01
	cbDataW:	3
	byDataW:	01 01 01

00000020:
	cbDataA:	0
	cbDataW:	0

00000080:
	VarA:	3(00000003)
	VarW:	3(00000003)

00000100:
	VarA:	2(00000002)
	VarW:	2(00000002)

00000200:
	cbDataA:	0
	cbDataW:	0


#1129
hW: 002704B4
uM: 0000010F{WM_IME_COMPOSITION
wP: 00000000
lP: 00001FBF
cs: 00001FBF
	[Enum]Composition String
	00000001: GCS_COMPREADSTR
	00000002: GCS_COMPREADATTR
	00000004: GCS_COMPREADCLAUSE
	00000008: GCS_COMPSTR
	00000010: GCS_COMPATTR
	00000020: GCS_COMPCLAUSE
	00000080: GCS_CURSORPOS
	00000100: GCS_DELTASTART
	00000200: GCS_RESULTREADSTR
	00000400: GCS_RESULTREADCLAUSE
	00000800: GCS_RESULTSTR
	00001000: GCS_RESULTCLAUSE
00000001:
	cbDataA:	0
	cbDataW:	0

00000002:
	cbDataA:	0
	cbDataW:	0

00000004:
	cbDataA:	0
	cbDataW:	0

00000008:
	cbDataA:	0
	cbDataW:	0

00000010:
	cbDataA:	0
	cbDataW:	0

00000020:
	cbDataA:	0
	cbDataW:	0

00000080:
	VarA:	0(00000000)
	VarW:	0(00000000)

00000100:
	VarA:	0(00000000)
	VarW:	0(00000000)

00000200:
	cbDataA:	0
	cbDataW:	0

00000400:
	cbDataA:	0
	cbDataW:	0

00000800:
	cbDataA:	2
	byDataA:	CE C4
	cbDataW:	2
	byDataW:	87 65

00001000:
	cbDataA:	0
	cbDataW:	0




日文输入法
~~~~~~~~~~

  以下是使用日文输入法输入“keo”(“毛お”。我不懂,乱输的)的效果:

#0348
hW: 000902DA
uM: 0000010F{WM_IME_COMPOSITION
wP: 000082AF
lP: 000001B9
cs: 000001B9
	[Enum]Composition String
	00000001: GCS_COMPREADSTR
	00000008: GCS_COMPSTR
	00000010: GCS_COMPATTR
	00000020: GCS_COMPCLAUSE
	00000080: GCS_CURSORPOS
	00000100: GCS_DELTASTART
00000001:
	cbDataA:	4
	byDataA:	A4 B1 A4 AA
	cbDataW:	4
	byDataW:	51 30 4A 30

00000008:
	cbDataA:	4
	byDataA:	A4 B1 A4 AA
	cbDataW:	4
	byDataW:	51 30 4A 30

00000010:
	cbDataA:	4
	byDataA:	00 00 00 00
	cbDataW:	2
	byDataW:	00 00

00000020:
	cbDataA:	8
	byDataA:	00 00 00 00 04 00 00 00
	cbDataW:	8
	byDataW:	00 00 00 00 02 00 00 00

00000080:
	VarA:	4(00000004)
	VarW:	2(00000002)

00000100:
	VarA:	2(00000002)
	VarW:	1(00000001)

00000200:
	cbDataA:	0
	cbDataW:	0


#0371
hW: 000902DA
uM: 0000010F{WM_IME_COMPOSITION
wP: 000096D1
lP: 000001B9
cs: 000001B9
	[Enum]Composition String
	00000001: GCS_COMPREADSTR
	00000008: GCS_COMPSTR
	00000010: GCS_COMPATTR
	00000020: GCS_COMPCLAUSE
	00000080: GCS_CURSORPOS
	00000100: GCS_DELTASTART
00000001:
	cbDataA:	4
	byDataA:	A4 B1 A4 AA
	cbDataW:	4
	byDataW:	51 30 4A 30

00000008:
	cbDataA:	4
	byDataA:	C3 AB A4 AA
	cbDataW:	4
	byDataW:	DB 6B 4A 30

00000010:
	cbDataA:	4
	byDataA:	01 01 02 02
	cbDataW:	2
	byDataW:	01 02

00000020:
	cbDataA:	12
	byDataA:	00 00 00 00 02 00 00 00 04 00 00 00
	cbDataW:	12
	byDataW:	00 00 00 00 01 00 00 00 02 00 00 00

00000080:
	VarA:	4(00000004)
	VarW:	2(00000002)

00000100:
	VarA:	0(00000000)
	VarW:	0(00000000)

00000200:
	cbDataA:	0
	cbDataW:	0


#0374
hW: 000902DA
uM: 0000010F{WM_IME_COMPOSITION
wP: 000096D1
lP: 00001E00
cs: 00001E00
	[Enum]Composition String
	00000200: GCS_RESULTREADSTR
	00000400: GCS_RESULTREADCLAUSE
	00000800: GCS_RESULTSTR
	00001000: GCS_RESULTCLAUSE
00000200:
	cbDataA:	4
	byDataA:	A4 B1 A4 AA
	cbDataW:	4
	byDataW:	51 30 4A 30

00000400:
	cbDataA:	12
	byDataA:	00 00 00 00 02 00 00 00 04 00 00 00
	cbDataW:	12
	byDataW:	00 00 00 00 01 00 00 00 02 00 00 00

00000800:
	cbDataA:	4
	byDataA:	C3 AB A4 AA
	cbDataW:	4
	byDataW:	DB 6B 4A 30

00001000:
	cbDataA:	12
	byDataA:	00 00 00 00 02 00 00 00 04 00 00 00
	cbDataW:	12
	byDataW:	00 00 00 00 01 00 00 00 02 00 00 00

作者:zyl910
版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0.
原文地址:https://www.cnblogs.com/zyl910/p/2186643.html