MFC プログラムでウィンドウの作成をフックしたい。
それを行う方法はありますか?
SetWindowHookExを使用してCBTProcをインストールします。
ここにいくつかのサンプルコードがあります。プログラムの最初から呼び出すだけで、通知コードInstallHook()
を監視できます。HCBT_CREATEWND
ドキュメントで説明されているように、関数からゼロ以外を返すことにより、ウィンドウの作成をキャンセルできます。
LRESULT CALLBACK MyCbtHook(int nCode, WPARAM wParam, LPARAM lParam)
{
switch(nCode)
{
case HCBT_CREATEWND:
{
HWND hWnd = (HWND)wParam;
TRACE("A window is being created, HWND = %p\n", hWnd);
break;
}
}
return CallNextHookEx( 0, nCode, wParam, lParam );
}
void InstallHook()
{
SetWindowsHookEx(WH_CBT, MyCbtHook, 0, GetCurrentThreadId());
}