1

と を使用して、いくつかの言語 (AutoIt、C#) でキーボード フックを実装しましSetWindowsHookExWH_KEYBOARD_LL。私は、同じ問題を抱えているいくつかの C++ プログラムも知っています。

Windows XP で完全に動作するため、コードは投稿しませんでした。ただし、Windows 7 では、ある時点でフックが「アンロード」されるか、それ以上のキーの処理を停止します。メモリ不足に関係しているようですが、よくわかりません。

Microsoft は、特定の状況下でサードパーティのフックをアンロードするロジックを追加するために、Vista または 7 でキーボード フックの動作方法を変更しましたか?


関連する質問:

マウスフックを再起動するには?
キーボード フックの検出

4

2 に答える 2

3

そうですね、UACがVistaに実装されたとき、それはたくさんいじくり回されてきました。それにもかかわらず、これは一般的な苦情ではありません。はい、Windowsがフックコールバックのコールバックを停止する可能性は十分にあります。コールバックをタイムリーに処理しないフッカーが1つある場合に、オペレーティングシステムが応答しなくなるのを防ぐ組み込み機能。診断なしでコールバックリストから自動的に削除されます。

これはタイムアウトに基づいており、OSのリソースが不足し始めたときに実際にトリップする可能性があります。十分なRAMがなく、多くのプロセスを実行しているように、大量のページングを取得します。より多くのRAMを必要とし、ディスクの断片化の問題(特にページングファイル)が原因でインストール前にワイプされるのではなく、マシンがアップグレードされたときに問題が発生する傾向があるため、Windowsの新しいバージョンで発生する可能性が高くなります。

タイムアウト設定は、HKCU \ Control Panel \ Desktop \ LowLevelHooksTimeout値(DWORD、たとえば10000)を追加することで微調整できます。superuser.comでそれについてもっと質問してください

于 2010-10-08T15:26:13.863 に答える
1

先日、自分のキーボードフックを書いていたときに説明したのと同じタイムアウトの問題が発生しました。この問題を回避するために、フックコールバックプロシージャを作成して、キープレスイベントを非同期的に呼び出し、すぐに戻るようにしました。

興味があれば、ここに私のコードへのリンクがあります。

于 2011-01-04T23:44:03.380 に答える