今天想仿制酷狗7的关闭效果, 用spy++竟然hook不住, 我以为它不是窗体,而是直接在桌面窗口上画图, 开始的想法是得到桌面没有绘制子窗口时的dc,然后在上面画, 但是我向他发送WM_PRINTCLIENT时,得到的黑色的背景, 最后查文档发现发送给这个消息,接受者窗口应该实现这个消息的处理, 最后在网上找到这篇神文:
http://www.fengyuan.com/article/wmprint.html
但是我发现还是不对, 因为这样也无法实现酷狗的关闭效果, 况且上面文章提供的subclass方法是使用的SetWindowlong修改消息处理过程来实现的,然而SetWindowlong在跨进程调用会失败,不过网上也有解决办法,比如Windows核心编程中提到的远程进程注入.
然后我发现如果窗口可以穿透,那么久可以实现酷狗的关闭效果,下面是窗体穿透的方法:
DWORD dwNewLong = GetWindowLong(hWnd, GWL_EXSTYLE); dwNewLong |= WS_EX_TRANSPARENT |WS_EX_LAYERED; SetWindowLong(hWnd, GWL_EXSTYLE, dwNewLong);
这样修改后真的可以穿透了,并且spy++也hook不住, 不知酷狗是不是这样弄的