確定文字を拾うだけならIMEは放置でいいです。
WM_CHAR(0x0102)をジャックしましょう。これだけで確定結果の文字列が拾えますよ。
ただし、ワイド文字列を受け取ると1バイトずつ切れて送られるので結合が必要ですし、
IMEの文字列の最後として何か来るわけでもなさそうなので表示のタイミングに気を使うことになります。。
その対策としてワイド文字列だけWM_IME_CHARで拾えば表示タイミングに気を使わなくてもいい。
ただし、メッセージの呼応として0を返さないとWM_CHARに分解されて送られるので注意や。
(なーんかXP環境だとWM_IME_CHARって何やってもWM_CHARに分解されたような覚えもあるんだが勘違いかなあ…?)
なにやら.NETの仕様らしい?よくわからんけーど。
#const global WM_CHAR 0x0102
#const global WM_IME_CHAR 0x286
oncmd gosub *charinput,WM_CHAR
oncmd gosub *charime,WM_IME_CHAR
sdim strbuf,64
stop
*charinput
if ( wparam == 0x0d ){ // Returnによる改行
gosub *string_cl
return 0
}
memexpand strbuf,strbufusing+4
poke strbuf,strbufusing,wparam
poke strbuf,strbufusing+1,0
strbufusing += 1
gosub *string_dirty
mes wparam
return 0
*charime
if ( wparam < 255 ){
sendmsg hwnd,WM_CHAR,wparam,lparam
return 0
}
memexpand strbuf,strbufusing+4
poke strbuf,strbufusing,wparam>>8
poke strbuf,strbufusing+1,wparam
poke strbuf,strbufusing+2,0
strbufusing += 2
gosub *string_dirty
return 0
*string_dirty
color 255,255,255
boxf 0,ypos
color
pos 0,ypos
mes strbuf
return
*string_cl
ypos += 16
strbuf = ""
gosub *string_dirty
return
昔こんなスレッドに返答したっけな。
自作インプットなら参考になるかも?
http://hsp.tv/play/pforum.php?mode=pastwch&num=58706
IMEの制御なんてしてないけど。