HSHELL_WINDOWCREATED 学习心得

本文介绍了HSHELL_WINDOWCREATED消息仅在顶级无拥有窗口创建时触发,详细解释了top-level, unowned window的概念,并通过实例分析了如何使用此消息拦截IE普通下载框,但无法捕获搜狗高速下载模式,因为它们不是无拥有窗口。" 342047,53474,理解代理与存根:在测试与嵌入式系统中的应用,"['测试', '嵌入式系统', 'GDB调试', '单元测试', '代理编程']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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下载 已完成安装这个窗口可以捕获到外,其他两个都是捕获不到的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值