Windows10の「新しいMicrosoft IME」を使うとImmSetCompositionStringが機能しない点について

Anonymous
2022-01-08T15:15:57+00:00

C#を用いて独自のエディタを作り、日本語入力の制御を行っています。

 プログラム(WindowsForm)の中でWM_IME_REQUESTメッセージを受け取った時に、ImmSetCompositionStringAで文字列 [漢字・ひらがな等] を設定することにより、その文字列の変換候補が表示され、再変換ができるようにしていました。

 しかし、1年ほど前からでしょうか…Windows10の「新しいMicrosoft IME」が機能するようになってから、上記の処理を行っても、文字列は渡っているようなのですが、変換候補の一覧が表示されず、渡された文字だけしか表示されません。(設定で「以前のMicrosoft IME」を使うようにすれば、普通に動作します)

 TSFを正しく用いることができれば、「新しい」IMEでも、目的の処理を行えると期待したのですが、勉強不足で、たどり着けない状況です。(ITfContext.GetSelectionを実行しても、ITextStoreACPを実装したクラスのGetSelectionが呼ばれない等「…GetReconversion」に至ることすらできず、ほぼ絶望状態です)

 今後「以前のMicrosoft IME」が使えなくなるということのようですが、上記の動作だけでも実現できないか、苦慮しているところです。C#でこの機能を実現された方はいらっしゃるでしょうか…?

(imm関連のAPIがTSFのラップの形で動いているとも聞きますが、将来上記の機能も再現していただけるのか、それとも全て新しい記述方法を用いるべきなのか、悩んでいます…)

 使用しているWindowsの仕様: Windows 10 Pro 21H1 OSビルド19043.1415 (2022/1/9 時点で最新のUpdate)

家庭向け Windows | Windows 10 | 入力と言語

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません
質問作成者が受け入れた回答
Anonymous
2022-01-08T15:30:23+00:00

やりたいことも分かるし言いたいことも分かるが、あえて言わせてもらうと、IMEのON/OFF以上の制御をしようとは思わない方が幸せになれます。

仕様的にはできそうに見えても、実際に制御しようとすると不具合の巣窟になっていて、特定の状況に対処してもアップデートで覆されることが多いです。

それでも何とかしたいというのであれば、MSDN Forumの方で質問したほうがいいでしょう。

Msdn フォーラム (microsoft.com)

この回答は役に立ちましたか?

3 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

3 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2022-01-20T06:41:58+00:00

    ヒントなども教えてくださり、ありがとうございます。OSについても、開発支援者側の世代や地域の言語の障壁も含め、難しい局面を迎えているような雰囲気ですね… 少し落ち着くまで、別の「無難な」方法で作業を進めていきたいと思います。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2022-01-09T00:47:54+00:00

    参考までにヒントを提供すると、[Windowsキー]+[.]で起動される絵文字入力が、IMEと同じような仕組みを使っていて、それがTSFの制御下で最優先になっていて、次候補として日本語IMEが動作するように絵文字入力が導入されたあたりから仕様が変わっています。日本語IMEにWindowメッセージを送って制御しているつもりが、別のところに配送されて無視されている可能性もあるということです。メッセージ処理のタイミングの差で面倒なことになっていることが多く、対処しても環境依存で問題が再発するなど面倒なのです。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2022-01-09T00:23:41+00:00

    ご返信ありがとうございます。仰る通りですね…

    どこに尋ねるべきかについてもご親切に教えて下さり、ありがとうございます。

    数週間ほど他の返信もお待ちして(無いかもしれませんが)、ここでは一旦解決済みとし、教えていただいたフォーラムで新たにお尋ねすることについて検討したいと思います。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません