WIN 7環境で使用して、グローバルキーボードフックのStephenToubsバージョンを使用しました。
しばらくは正常に動作し、その後キーストロークの受信を停止します。
regeditでタイムアウト値を増やしましたが、しばらくすると切断されます。
問題は、フックが切断されているかどうかをどのように検出し、フックを再びアクティブに設定するにはどうすればよいかということです。
WIN 7環境で使用して、グローバルキーボードフックのStephenToubsバージョンを使用しました。
しばらくは正常に動作し、その後キーストロークの受信を停止します。
regeditでタイムアウト値を増やしましたが、しばらくすると切断されます。
問題は、フックが切断されているかどうかをどのように検出し、フックを再びアクティブに設定するにはどうすればよいかということです。
( msdnから)知る方法はありません:
フックプロシージャは、次のレジストリキーのLowLevelHooksTimeout値で指定されたデータエントリよりも短い時間でメッセージを処理する必要があります:HKEY_CURRENT_USER \ Control Panel \ Desktop
フック手順がタイムアウトした場合、システムはメッセージを次のフックに渡します。ただし、Windows 7以降では、フックは呼び出されずにサイレントに削除されます。フックが取り外されているかどうかをアプリケーションが知る方法はありません。
これを回避する1つの方法は、最後に受信したメッセージのタイムスタンプを保持し、前のメッセージからしばらく経過した後、バックグラウンドタイマーを使用して新しいフックを追加することです。
また、これを最小限に抑えるために、フック処理メソッドは必要最小限の情報のみを収集し、データの実際の処理を別のスレッドに任せる必要があります。
これは機能です!これが理由の説明です。