1

SetWindowsHookEx を使用して c# で低レベルのキーボード フックを作成しています。質問は、キーボード イベント関数をメイン スレッド以外のスレッドで実行するにはどうすればよいですか? また、現在メイン スレッド以外のスレッドを持っていないので、キーボード フック イベントが発生するまで停止するスレッドを作成するにはどうすればよいですか?

4

2 に答える 2

2

C# キーボード フックのコードは次のとおりです。

Hook.CreateHook(METHODNAMEHERE); を呼び出すだけです。新しい Thread で (Thread クラスを参照)。

于 2008-10-07T13:45:00.470 に答える
0

新しいスレッドにフックを設定する方法に回答があるため、これは質問の2番目の部分にのみ回答します:

Windows フォーム アプリケーションを使用している場合、追加のスレッドを使用する際に問題が発生します。フォーム コントロールと通信するには、Control.Invoke を使用する必要があります。

それ以外に、「ワーカー」スレッドを開始し、ManualResetEvent または AutoResetEvent で待機させます。キーボードフックがキー押下の通知を受信したら、「共有」フィールドを使用してキーを配置し、イベントをリセットして、「待機中」のスレッドがそれを処理できるようにします。

「共有」フィールドの周りに適切なロックを実装することを忘れないでください。

于 2008-10-07T13:45:26.617 に答える