none
CDialogから派生したダイアログを閉じるときImmSetOpenStatusでIMEを閉じているが、また開いてしまう RRS feed

  • 質問

  • CDialogから派生したダイアログ内で、IMEのON、OFFの制御を行っています。

    文字列入力ではON、その他はOFF:この制御は出来ています。

    ダイアログを閉じると時IMEを閉じていますが。

    ダイアログが完全に閉じるとIMEが開きます。

    IMEを開く処理は行っていない。

    IMEのON、OFFはImmSetOpenStatus()を使用している。

    ImmGetConversionStatusなどは使用していません。


    2020年10月16日 2:59

すべての返信

  • Windows 8 から IME の仕様が変わっていて、それまでスレッド単位に保持されていた IME の状態がユーザー単位て保持されるようになりました。

    以前の OS と同じようにスレッド単位に変更することで以前の OS と同様に制御できるはずです。

    「Tech TIPS:Windows 8のIMEのオン/オフをアプリごとに制御する」
    https://www.atmarkit.co.jp/ait/articles/1212/14/news050.html

    「WINDOWS10 の IME 状態をアプリ毎に変えるための設定」
    http://toasted-laver.blogspot.com/2017/05/windows10-ime.html

    「グループポリシーによるWindows8の「入力方式の切り替え」を設定する」
    http://nine-tails.cocolog-nifty.com/g_log/2013/05/windows8-4bb7.html

    あとは SetInputScope API で制御することができるようです。

    「SetInputScope」
    https://docs.microsoft.com/ja-jp/windows/win32/api/inputscope/nf-inputscope-setinputscope

    呼び出すだけだとうまくいかなかったので使い方に少しコツがいるようですが、調べ切れていません。

    2020年10月16日 7:18
  • miyanagaさん、こんにちは。フォーラムオペレーターのKumoです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    Win10のバージョンは何でしょうか。
    19613.1005にアップデートしてみてください。

    「新しい日本語または中国語のIMEを使用しているときに、テキストフィールドにフォーカスを設定すると、ImmSetOpenStatus() APIがIMEモードを正しく変更しなかったWindows Formsアプリケーションに影響する問題を修正しました。」

    詳細はこのリンクをご参照まで。

    どうぞよろしくお願いいたします。 


    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2020年10月19日 9:27
    モデレータ