HSHELL_WINDOWCREATED 学习心得

来源:互联网 发布:蜂窝数据语音与数据 编辑:程序博客网 时间:2024/06/05 17:21
HSHELL_WINDOWCREATED   
A top-level, unowned window has been created. The window exists when the system calls this hook.

 

上面写的很清楚,这种消息只能在top-level,unowned window被创建的时候才会生成。那什么是 top-level, unowned window 。这个网站上写的比较清楚http://www.codeguru.com/forum/showthread.php?t=491610。

Code:
// create a top-level window (not owned)HWND hWnd = CreateWindow(szWindowClass, szTitle,               WS_OVERLAPPED, // WS_CHILD style is not set, so it's a top-level window.              CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,               NULL,          // no handle to the owner, so it's not owned.              NULL, hInstance, NULL);
Code:
// create a top-level window (owned)HWND hWnd = CreateWindow(szWindowClass, szTitle,               WS_OVERLAPPED, // WS_CHILD style is not set, so it's a top-level window              CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,               hWndParent,    // handle to the owner, so it's an owned window              NULL, hInstance, NULL);

看上面的代码,只要没有设置WS_CHILD风格的窗口就是top_level的。unowned window窗口就是createwindow倒数第四个参数没有给值的就是了。那现在我们就可以得出结论了:用HSHELL_WINDOWCREATED 这种方式拦截浏览器下载框创建,只能拦截到普通ie下载(会弹出两个下载框)的里面那个,就是显示下载了多少那个,外面这个窗口就拦截不到的,因为他不是unowned 窗口。而搜狗高速下载模式就拦截不到了,它也不是unowned的。下面给几张图。

普通IE下载会弹出两个下载框

                   普通IE下载会弹出两个下载框

spy++参看两个窗口中里面那个得到的情况

          spy++参看两个窗口中里面那个得到的情况

spy++参看两个窗口中外面那个得到的情况

spy++参看两个窗口中外面那个得到的情况

搜狗高速下载窗口信息

搜狗高速下载窗口信息

 

从上面可以看到除了普通IE下载 已完成安装这个窗口可以捕获到外,其他两个都是捕获不到的。