当前位置:C++技术网 > 资讯 > 希望用全局HOOK变为指定窗口HOOK

希望用全局HOOK变为指定窗口HOOK

更新时间:2016-08-16 19:56:46浏览次数:1+次


C++技术网解答:

    你的拦截程序,拦截本身是可以工作的。只是不能拦截指定的窗口。所以问题的关键就在于识别消息的窗口句柄和你目标窗口的句柄。在回调函数的参数lPARAM中存储了msg的结构体指针,结构体中含有消息的所有信息。其中包含了窗口句柄。所以,在消息过滤上,你已经得到了窗口句柄,也就可以过滤出你需要的窗口。现在的问题就是你要确定你目标窗口的句柄。

    如果你知道窗口的标题,就可以使用FindWindow函数来查找窗口。如果你不知道窗口的标题,你测试时,可以用SPY++去找到目标窗口的句柄,然后放到程序直接比对过滤。这就是你现在指定窗口需要的过滤处理。

    你写的代码中的,这是拦截QQ主窗口的消息。用SPY++拦截QQ主窗口的效果如下:

    图中可以看到:标题为QQ,窗口类为TXGuiFoundation。但是聊天窗口就不是这样的哦。下面看图:

    可以看到,聊天窗口的标题就是顶部看到的文字,但又不完全是。所以,具体窗口标题是什么,要以SPY++抓的为准,不能凭感觉。

    在《Windows零基础入门:4.6 通过窗口标题查找窗口并获取其窗口类的图标句柄》中,就利用窗口标题调用FindWindow函数借用了其他程序的图标设置了自己程序的图标。

    SPY++的使用方法见:窗口跟踪神器Spy++和窗口反跟踪技术DirectUI的整体分析