1. 桌面是一个类名称为SysListView32的列表控件,你可以尝试HOOK这个控件的WM_PAINT消息.2. 不明白,你为什么需要自己调用Navigate2方法,IE会自己刷新的,然后产生一系列的事件:BeforeNavigate2、DownloadBegin、DownloadComplete和DocumentCoplete

解决方案 »

  1.   

    问题1:没做过所以没思路。好像刷新是固有的功能,使用Shell扩展菜单可能无法替换内置功能。问题2:在实现浏览器宿主容器的时候同时实现IOleCommandTarget接口,截获Exec调用,当nCmdID==OLECMDID_REFRESH时直接调用Navigate2,其它调用默认处理
      

  2.   

    感谢laiyiling的回复,关于您所回复的两点:
    1.需要的是当点刷新菜单的时候,自己程序进行响应切换壁纸;如果拦截WM_PAINT消息,则只要桌面有变化,比如在桌面上点右键、新建个快捷方式等,都会导致桌面Repaint,发出WM_Paint消息,这样就不符要求了;
    2.通过DWebBrowserEvents无法响应IE刷新。
      

  3.   

    jameshooo:谢谢回复
    2.不知您所说方法在BHO中是否适用,我明天会先做个实验,谢谢!
      

  4.   

    BHO不适用,仅仅适用于自己创建浏览器控件的情况。如果是截获现有IE窗口,则必须截获刷新按钮的消息。
      

  5.   

    jameshooo:如果BHO不适用,不知该如何截获刷新按钮和菜单的消息?之前在CodeProject上看到一个例子(http://www.codeproject.com/KB/IP/detecting_the_ie_refresh.aspx),觉得不是根本解决方法。
      

  6.   

    用spy++捕获刷新按钮点击时产生的消息,自己做消息hook截获这个消息
      

  7.   

    1.用Spy++截获过桌面刷新的消息,包括WM_SHOWWINDOW、WM_WINDOWPOSCHANGING、WM_CHILDACTIVATE、WM_DESTROY、WM_NCDESTROY,这些消息看上去都不太适用,像WM_SHOWWINDOW、WM_WINDOWPOSCHANGING在不刷新时也会触发,其他几个不太了解。
    2.搜到相关资料知做汉化时可以通过钩子修改菜单的标题,如果这样,那是不是应该有专门截获某个菜单的单击事件的方法?
      

  8.   

    蒋大侠也没做过这个吗 :(
    现在用Hook截获桌面的WNDPROC过程,当点桌面的右键菜单时,能触发WM_NOTIFY消息,但又有新问题:不知通过WParam、LParam怎么知道这是哪个菜单的事件?以下代码获取的菜单标题不正确(Delphi语言):MenuText: String;//菜单标题
    SendMessage(PNMHdr(lParam).hwndFrom, WM_GETTEXT, 255, LongInt(PChar(MenuText)));
      

  9.   

    1:要知道壁纸更改等消息请在程序中接收WM_SETTINGCHANGE,没必要hook
    2:BHO