关键字:add to favorite, import/export wizard, shell docobject view, internet explorer_server
除了“整理收藏夹”与“添加到收藏夹”对话框外,还有其它一些对话框是我们希望直接通过webbrowser调用的,比如“导入/导出”对话框,用一般的方法很难调用.ishelluihelper尽管提供了importexportfavorites方法,但结果只是显示一个选择文件的对话框,且只能导入/导出收藏夹而不能对cookies操作. 【程序编程相关:SQL Server存储图像数据的策略与】1.概述 【推荐阅读:扫雷游戏源码(2)】
【扩展信息:用Java日志包进行调试】
2.契机msdn中有一篇叫“webbrowser customization”的文章,其中介绍了通过idochostuihandler.showcontextmenu方法自定义webbrowser上下文菜单的方法.其原理是从“shdoclc.dll”的资源中创建菜单,作一些修改之后用trackpopupmenu函数(注意在标志中包含tpm_returncmd)将菜单弹出,然后把返回的command id发送给“internet explorer_server”窗口进行处理.......// 显示菜单int iselection = ::trackpopupmenu(hmenu,? tpm_leftalign | tpm_rightbutton | tpm_returncmd,? ppt->x,? ppt->y,? 0,? hwnd,? (rect*)null);// 发送command id到外壳窗口lresult lr = ::sendmessage(hwnd, wm_command, iselection, null);......好,如果找到所有上下文菜单的command id,不就可以随时调用了?确实是这样的.
3.实现用exescope之类应用程序资源探索器打开“shdoclc.dll”便可以在菜单资源下找到上下文菜单的设计,如下图:我们要做的,就是将这些id发送到“internet explorer_server”窗口进行处理.问题是webbrowser其实是一个ole容器,我们使用的chtmlview又是更外层的封装,他们的m_hwnd成员变量并不是ie窗口的句柄,如何找到我们需要的句柄呢?请看下面的图:
根据图中显示的从属关系,顺藤摸瓜,最内层的窗口“internet explorer_server”的句柄就是我们需要的东西.... 下一页