何かがおかしい
Call SendMessage(hWnd_Edit, WM_IME_CHAR , Asc("a"), 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR , Asc("b"), 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR , Asc("c"), 0)
Call SendMessage(hWnd_Edit, WM_IME_KEYDOWN, VK_BACK, 0)
Call SendMessage(hWnd_Edit, WM_IME_KEYUP, VK_BACK, 0)
とすると、"b"と"c"が消えました( VK_BACK はBackSpace)。
WM_IME_KEYDOWN と WM_IME_KEYUPでワンセットかと思いきや、 WM_IME_KEYDOWN と WM_IME_KEYUPで二回VK_BACKを押したことになっているようです(私の環境だけ?)。
ちなみに、「押しっぱなし」がどうなるのかも確かめてみました。
Call SendMessage(hWnd_Edit, WM_IME_CHAR , Asc("a"), 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR , Asc("b"), 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR , Asc("c"), 0)
Call SendMessage(hWnd_Edit, WM_IME_KEYDOWN, VK_BACK, 0)
"c"が消えただけで、"a"と"b"は残りました。どうやら「押しっぱなし」のようなことにはならないようです。
さらに、VK_LEFT(左キー)の挙動を調べました。
Call SendMessage(hWnd_Edit, WM_IME_CHAR, Asc("a"), 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR, Asc("b"), 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR, Asc("c"), 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR, Asc("d"), 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR, Asc("e"), 0)
Call SendMessage(hWnd_Edit, WM_IME_KEYDOWN, VK_LEFT, 0)
Call SendMessage(hWnd_Edit, WM_IME_KEYUP, VK_LEFT, 0)
Call SendMessage(hWnd_Edit, WM_IME_KEYDOWN, VK_LEFT, 0)
Call SendMessage(hWnd_Edit, WM_IME_KEYUP, VK_LEFT, 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR, Asc("X"), 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR, Asc("a"), 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR, Asc("b"), 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR, Asc("c"), 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR, Asc("d"), 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR, Asc("e"), 0)
Call SendMessage(hWnd_Edit, WM_IME_KEYDOWN, VK_LEFT, 0)
Call SendMessage(hWnd_Edit, WM_IME_KEYDOWN, VK_LEFT, 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR, Asc("X"), 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR, Asc("a"), 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR, Asc("b"), 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR, Asc("c"), 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR, Asc("d"), 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR, Asc("e"), 0)
Call SendMessage(hWnd_Edit, WM_IME_KEYUP, VK_LEFT, 0)
Call SendMessage(hWnd_Edit, WM_IME_KEYUP, VK_LEFT, 0)
Call SendMessage(hWnd_Edit, WM_IME_CHAR, Asc("X"), 0)
この辺、挙動を確認しながらプログラム組まないと、よくわからないバグになりそうです。環境による気もしてきました……。 どこかに良い書籍や情報はないでしょうか。