通知
すべてクリア
Topic starter
2008年8月8日 2:30 AM
グローバルフックを使っていて、終了時にUnhookWindowsHookExを
呼んでいるのですが、呼んだにもかかわらず、
フック用のDLLが掴まれた状態になっています。
掴むのをやめさせるためには、どうしたらよいのでしょうか?
開発環境は visual studio.net2003 になります。
2008年8月8日 6:27 AM
これだけの情報ではわかりませんが・・
HHOOK hHook ;
ではなくて
static HHOOK hHook ;
としていますか?
2008年8月9日 2:59 PM
UnhookWindowsHookEx を呼んだからと言って、すぐに開放される保証はないでしょう。
MSDN に書いてありませんし。
というかむしろ、
> UnhookWindowsHookEx 関数が制御を返した後も、フックプロシージャが
> ほかのスレッドから呼び出される状態になっていることがあります。
とさえ書いてありますね。
SetWindowsHookEx は、一般的にはフック DLL の中から呼びますが、アプリ側で明示的
に LoadLibrary したハンドルを SetWindowsHookEx に渡して、フック解除した後で
FreeLibrary してやれば開放できるかもしれません(フックハンドルをどうやって DLL
側に渡すかという課題はありますが)。
ただ、注釈にあるように、フック解除後も他のスレッドがフックプロシージャを実行して
いるとすると、強制的にアンロードするのは危険かもしれませんね。