1

私は C# で SetWindowsHookEx を使用して、(テキスト ボックスの) キーボード入力をバッファリングできるようにしています。

現在の基本的な設定は、新しいテキスト ボックスを作成するたびに、テキスト ボックスが内部的に新しい「KeyboardBuffer」オブジェクトを作成し、それがキーボード フックを設定することです。

    public KeyboardBuffer(IntPtr whnd)
    {
        this.ProcessMessagesCallback = new GetMsgProc(ProcessMessages);
        this.HookHandle = SetWindowsHookEx(HookId.WH_GETMESSAGE, this.ProcessMessagesCallback,
                                           IntPtr.Zero, GetCurrentThreadId());
    }

(完全なコードはここで見ることができます)

問題は、N 個のテキスト ボックスがある場合、1 つのテキスト ボックスに入力すると、同じ文字が N 回表示されることです。これは、SetWindowsHookEx が .NET インスタンスを区別しないという事実に起因します。

すべてのテキストボックスがアクセスする静的な KeyboardBuffer オブジェクトを作成することで一時的にこれを修正しましたが、これは他の多くの問題を引き起こしました。

より良い解決策はありますか?

前もって感謝します。

編集:私はこれについてもっと考えました.バッファを無効/有効にすると、フックを削除/リセットできることに気付きました. フックの設定に顕著なオーバーヘッドはありますか?

4

0 に答える 0