をフックするためにwndproc
、私はaを書いてwndprochook
使用しますSetWindowLong
:
wndproc=(WNDPROC)GetWindowLong(hwnd_1,GWL_WNDPROC);
SetWindowLong(hwnd_1,GWL_WNDPROC,(LONG)wndprochook);
今、私は関数の中で何かをしなければなりません、wndproc
そして関数の終わりに、私はオリジナルを呼び出しますwndproc
:
return wndproc(hwnd, uMsg, wParam, lParam);
それは失敗しますが、私が見つけた神に感謝しますCallWindowProc
:
return CallWindowProc(wndproc, hwnd, uMsg, wParam, lParam);
今それは働いています。質問1:なぜ使用する必要があるのですか?単に電話するときに何が欠けていますか?CallWindowProc
wndproc
フックは正常に機能していますが、プログラムを終了するとクラッシュします。もちろん、すべてが完了し、クラッシュは実際には何にも影響しません。しかし、クラッシュを見るのはまだ悪いことです。質問2:ここで何が起こったのか、そしてそれを修正する方法は?
元のプログラムがどのように閉じられるかについての情報がないことを残念に思います。私が行うのは、wndproc
いくつかのメッセージをキャプチャするためにフックするだけだからです。ですから、これまでに同様の状況に遭遇したことのある経験豊富な人が助けてくれることを願っています。