如何捕获explorer重启的消息

在项目中,有时候可能会因为项目本身的原因,需要捕获explorer重启的消息,然后再做一些处理。
比如考虑以下情况的发生:
程序hook了windows 桌面窗口,子类化这个窗口,然后做一相关的处理,但是如果我重启了explorer,那就需要重新再hook一下,但如何截获explorer重启的消息呢?

我们可以用spy++来钩一下,看看什么消息发生了,如图:

图(1):

图(1)

当然,你也可以尝试钩一下其它应用程序,比如notepad.exe,注意,在钩消息的时候,使用如下设置才能比较清楚的看到我们想要的消息。如图:

图(2)

图(2)

通过图(1)我们可以看到,在explorer重启时,应用程序收到了一个注册消息,[Registered:"TaskbarCreated"] ,这个注册消息是根据字符串"TaskbarCreated"产生的。实际上,在安装了Internet Explorer 4.0及以上版本的Windows操作系统中,当explorer重启时,任务栏会被重新建立,此时,外壳(shell)会向所有顶层的应用程序发出通知消息,该消息是外壳以字符串"TaskbarCreated"为参数向系统注册获得的。
该消息的ID=RegisterWindowMessageW(L"TaskbarCreated"); 
该消息已经被系统注册过,因此,我们的应用程序在调用这个函数时,该函数会返回它对应的注册消息ID,这个ID是唯一的。 

因此,我们在程序中可以按以下方式来获取这个消息:
1. 定义一个消息,其值为RegisterWindowMessageW(L"TaskbarCreated")返回的结果;
2. 在应用程序的消息循环中接收该消息。

简要代码如下:

PS:其另外一个应用是任务栏通知图标的重建,见链接:http://blogold.chinaunix.net/u2/67530/showart_601500.html

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值