有个关于用Hook拦截窗口消息的钩子,现在遇到点困难,特来请教..
我写了个钩子,用的WH_CBT类型,在钩子函数中这样判断:
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0)
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
if (nCode == HCBT_ACTIVATE)
{
HWND hWnd= (HWND)wParam;
::SetWindowPos(hWnd, NULL, 100,100, 400,400, SWP_SHOWWINDOW);
}
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
我的目的是,当我的钩子被安装后,只允许所有窗口在100,100,400,400的屏幕坐标内运行。
我是这么做的:当用Hook拦截到被激活的消息时,我用SetWindowPos来改变它的窗口的大小和位置,控制到这个坐标内。
现在运行的结果是,其它窗口被激活时,能在这个坐标内。但系统窗口如windows的桌面,开始菜单等,只要收到WM_ACTIVATE消息时,也会跑到100,100,400,400这个坐标内去,
请问有办法只拦截普通的程序窗口,而不处理开始菜单,桌面等的消息吗?或者有其它合适的方法吗?