高分请教,Hook到窗口显示消息后,怎么让窗口不可见,并且不显示任务栏图标?
wts 2008-10-21 12:26:55 我Hook了WH_CALLWNDPROC消息,并且在Hook方法中拦截WM_SHOWWINDOW,从而拦截窗口显示消息
我想拦截窗口显示消息之后,控制窗口不可见,并且不显示任务栏图标。
1、我尝试用ShowWindow(hwnd,SW_HIDE);
但这样会导致又发送新的WM_SHOWWINDOW消息,并被我的Hook方法拦截,好像进入递归循环一样,这个方法不行。
2、我尝试SendMessage发送WM_SHOWWINDOW消息.....,与1的效果一样,也不行
3、 targetStyle := getWindowLong(Hwnd, GWL_EXSTYLE);
targetStyle := targetStyle or $80000;
SetWindowLong(winStruct.Hwnd, GWL_EXSTYLE, targetStyle or WS_EX_TOOLWINDOW);
SetLayeredWindowAttributes(Hwnd, 0, 0, 2);//窗口透明
发现窗口虽然透明不可见,但任务栏图标依然存在。注释掉窗口透明代码,发现窗口已经变成工具窗口,但却依然显示最大化最小化按钮残像。通过对窗口最小化和恢复可以观察到。
4、我尝试
targetStyle := SWP_NOSIZE or SWP_NOMOVE or SWP_NOZORDER or SWP_HIDEWINDOW;
setwindowpos(Hwnd, hwnd_top, 0, 0, 100, 100, targetStyle);
发现在这个代码无效。但在一个普通程序中,对于一个已经显示的窗口测试,发现是有效的。我想原因就是setwindowpos只对已经显示的窗口有效,而我在Hook过程中使用时,目标窗口还没有显示出来,所以无效。
5、听说还有一种办法,是将目标窗口在一个虚拟桌面中显示。但对于我这里不太使用,因为我还要根据窗口的一些运行情况,将其恢复到当前桌面显示。
我这里并不是一个简单隐藏窗口的问题。
大家看看,还有什么好办法,能达到我要的效果?
另外,不懂的,不能回答的,就别顶了,我会自己关注帖子,自己提前的,谢谢合作。