私は 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 オブジェクトを作成することで一時的にこれを修正しましたが、これは他の多くの問題を引き起こしました。
より良い解決策はありますか?
前もって感謝します。
編集:私はこれについてもっと考えました.バッファを無効/有効にすると、フックを削除/リセットできることに気付きました. フックの設定に顕著なオーバーヘッドはありますか?