vb.net の WindowsHookEx に問題があります。特に 3D レンダリングで PC が過負荷になると、Windows がキーボード フックを自動的に切断し、ホットキーが機能しなくなります。調べてみたところ、フックがアクティブか切断されているかを検出する方法がないようです。そこで、moodforaday が提示したこの方法を試してみまし た。低レベルのキーボード フックが Windows によって自動的に切断されたことを検出することは可能ですか? hook-has-been-automatically-d
彼は、GetLastInputInfo を定期的に使用し、キーが使用されたときに GetLastInputInfo を別の変数に格納し、結果を比較すると述べています。ティックが古い変数よりもはるかに新しい場合は、切断されている可能性があります。これは素晴らしい方法ですが、マウスのような他のものからダニが上がる可能性があります。私のフック クラスにはマウス フックがないため、マウスを動かしたときにティック カウントの変数を格納できません。そのため、フッククラスの新しいインスタンスを作成して再度フックすることになりました。保存されたティックが新しいティックよりも 10000 ティック古いかどうかを毎秒チェックします。
フックの新しいインスタンスを作成し続けても大丈夫ですか? それは常にフック/アンフックを維持し、それが Windows の問題になるかどうか疑問に思っています。
また、フックが切断されているかどうかを検出する別の方法を誰かが持っている場合は、この問題全体を解決できることをお知らせください.