在为IE8和IE9做BHO的时候,会碰到用户会添加多个Tab选项卡的情况,我想问的是,当用户用右键的“在新选卡打开”时,这时IE创建的一个新的Tab的句柄可以如何获取?直接遍历所有Tab的话,又是如何区别它就是刚刚创建的那一个呢?求解答。。

解决方案 »

  1.   

    如果你已经得到了使用BHO得到那个新建窗口通知的话,那可以在之前先保存当前保存当前存在的窗口的句柄,当有新建窗口时,再遍历一次当前存在的窗口,然后与之前保存的进行比较。如果不是用BHO,可以hook一下WH_CBT,当nCode等于HCBT_CREATEWND前先遍历得到 当前Tab窗口有哪些,再让它运行后遍历比较,得到新窗口句柄,或者可以根据hwndInsertAfter得到新窗口
      

  2.   

    看上去这个像
    http://msdn.microsoft.com/en-us/library/aa768288(v=vs.85).aspx下面描述里面有这样的信息
    The event is raised during the following actions:The user clicks a link while pressing the SHIFT or CTRL key.
    The user right-clicks a link and selects Open in New Window or Open in New Tab .
      

  3.   

    这个我知道,每产生一个Tab的确都会加载一个BHO实例,但是在IE8与IE9中,用get_HWND函数获取的都是浏览器本身的句柄。。现在我的解决办法是,在IE8中遍历所有的Tab,只要发现谁的标题是"Windows Internet Explore"那么这个就是新创建的一个Tab,因为在IE8中新Tab的初始标题就是“Windows Internet Explore”,然后在IE9中找对应的名称就好了现在我有个想法是,可不可以通过查找当前所被加载的DLL的父进程(因为IE8,9每一个Tab一个线程),然后再来获取它对应的窗口句柄