2007年01月26日
IME制御 つづき
以前(id:TakamiChie:20070120:1169317284)悩んでいたIME制御の件ですが、無事解決しました。
――ということで、Windowsと同じく、Imm系のAPIを呼出せばOK。ここから先はWindowsのプログラミングTipsサイトを見ればすぐ解決しますね。
IntPtr context = ImmGetContext(hWnd);
try
{
int conv = 0;
int sentence = 0;
ImmGetConversionStatus(context, ref conv, ref sentence);
ImmSetConversionStatus(context, /*ここに新しい変換コードを指定*/, sentence);
}
finally
{
ImmReleaseContext(hWnd, context);
}
APIの宣言については上記のスレッドにもありますが、
[DllImport("Coredll.dll", SetLastError = true)]
private static extern IntPtr ImmGetContext(IntPtr hWnd);
[DllImport("Coredll.dll", SetLastError = true)]
private static extern bool ImmReleaseContext(IntPtr hWnd, IntPtr hIMC);
[DllImport("Coredll.dll", SetLastError = true)]
private static extern bool ImmGetConversionStatus(IntPtr hIMC, ref int fdwConversion, ref int fdwSentence);
[DllImport("Coredll.dll", SetLastError = true)]
private static extern bool ImmSetConversionStatus(IntPtr hIMC, int fdwConversion, int fdwSentence);
と書いておきましょう。数字入力にする場合はImmSetConvertStatusにIME_CMODE_ALPHANUMERIC(0x00)を指定すればOK。
本当に何でもCoredll.dllにまとまってるんですね。何が使えて何が使えないのか、どこかに一覧でもないものでしょうか*1。
*1:DLLをコアダンプすればいいのでしょうか。どこかでそんな話を聞いたなあ
トラックバック - http://d.hatena.ne.jp/TakamiChie/20070126/1169762969
リンク元
- 5 http://jp.cocomment.com/comments
- 4 http://d.hatena.ne.jp/keyworddiary/W-ZERO3?date=20070125
- 2 http://d.hatena.ne.jp/keyword/Axim
- 2 http://d.hatena.ne.jp/keyworddiary/PDA
- 1 http://blogger.blog360.jp/95185/30646249
- 1 http://d.hatena.ne.jp/asindiary/B000CSRIZ0
- 1 http://d.hatena.ne.jp/keyword/プログラミング
- 1 http://d.hatena.ne.jp/keyword/ボーナス
- 1 http://d.hatena.ne.jp/keyword/dll
- 1 http://d.hatena.ne.jp/keyworddiary/C言語?week=20070114
