3

vb.net の WindowsHookEx に問題があります。特に 3D レンダリングで PC が過負荷になると、Windows がキーボード フックを自動的に切断し、ホットキーが機能しなくなります。調べてみたところ、フックがアクティブか切断されているかを検出する方法がないようです。そこで、moodforaday が提示したこの方法を試してみまし た。低レベルのキーボード フックが Windows によって自動的に切断されたことを検出することは可能ですか? hook-has-been-automatically-d

彼は、GetLastInputInfo を定期的に使用し、キーが使用されたときに GetLastInputInfo を別の変数に格納し、結果を比較すると述べています。ティックが古い変数よりもはるかに新しい場合は、切断されている可能性があります。これは素晴らしい方法ですが、マウスのような他のものからダニが上がる可能性があります。私のフック クラスにはマウス フックがないため、マウスを動かしたときにティック カウントの変数を格納できません。そのため、フッククラスの新しいインスタンスを作成して再度フックすることになりました。保存されたティックが新しいティックよりも 10000 ティック古いかどうかを毎秒チェックします。

フックの新しいインスタンスを作成し続けても大丈夫ですか? それは常にフック/アンフックを維持し、それが Windows の問題になるかどうか疑問に思っています。

また、フックが切断されているかどうかを検出する別の方法を誰かが持っている場合は、この問題全体を解決できることをお知らせください.

4

1 に答える 1

0

バックグラウンド スレッドで 3D レンダリングを行います。Control.InvokeUI コントロールに直接アクセスするコードにのみ使用してください。

または、レンダリングを非常に小さな断片に分割し、それらをメッセージとして自分自身に投稿して、メイン スレッドで処理することもできます。このようにして、内部メッセージと外部メッセージの両方を処理できます。

どちらの場合でも、アプリケーションは適切なタイミングで応答し、Windows が応答していないと見なす理由はなく、キーボード ショートカットはそのまま残ります。

于 2012-07-01T21:05:51.990 に答える