高見知英のかいはつにっし このページをアンテナに追加 RSSフィード

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をコアダンプすればいいのでしょうか。どこかでそんな話を聞いたなあ

yasuhoyasuho 2007/01/26 13:41 Visual Studioのコマンドプロンプトからcoredll.libのあるフォルダへ移動し、link /dump /exports coredll.libとすれば、export symbolsが出力されますよ。
Windows Mobile 5.0 SDKならば、LIBファイルはC:¥Program Files¥Windows CE Tools¥wce500¥Windows Mobile 5.0 Pocket PC SDK¥Lib¥ARMV4I配下にあると思います。

TakamiChieTakamiChie 2007/01/29 01:41 遅れましたがやってみました。
すごい量ですね、全てのAPIですから当たり前ですが、圧倒されます。
しかし、何かのとっかかりになりそうです、ありがとうございます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/TakamiChie/20070126/1169762969