2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

日本語入力中か否かを調べる方法

Last updated at Posted at 2018-01-24

IME での日本語入力中を判定する

Windows フォームアプリケーション上で日本語入力中か否かを取得するためのオブジェクトを実装してみます。
ファンクションキーの処理を実装したけど日本語入力中には機能させたくない、などニーズがある場合に使えるかと思います。

実装概要

  1. IMessageFilter を実装するクラスを作ります。
  2. PreFilterMessage メソッドの実装を、ウィンドウメッセージに基づいて日本語入力の開始と終了を判別するようにします。
  3. Application.AddMessageFilter メソッドで、自身のインスタンスをアプリケーションレベルのメッセージフィルターとして登録します。
  4. 作成したクラスのインスタンスをアプリケーション開始時などに作成・保持しておきます。
  5. インスタンスの Compositing プロパティが true の場合は、日本語入力中です。
using System.Windows.Forms;

namespace ImeStatus
{
    // ウィンドウメッセージを処理するために
    // IMessageFilter インターフェイスを実装します。
    public class ImeStatus : IMessageFilter
    {
        public ImeStatus()
        {
            // コンストラクター内で
            // メッセージフィルターとして自身を登録します。
            Application.AddMessageFilter(this);
        }

        public bool Compositing
        {
            get; private set;
        }

        // アプリケーションがウィンドウメッセージを処理する前に
        // 呼び出されます。
        public bool PreFilterMessage(ref Message m)
        {
            const int WmStartComposition = 0x10D;
            const int WmEndComposition = 0x10E;
            switch (m.Msg)
            {
                case WmStartComposition:
                    // 日本語入力の開始
                    Compositing = true;
                    break;
                case WmEndComposition:
                    // 日本語入力の終了
                    Compositing = false;
                    break;
            }
            return false;
        }
    }
}
2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?