IE网页截图技术总结

浏览器滚屏截图工具,支持浏览器滚动条自动滚动截屏 浏览器滚屏截图工具,支持自动定位浏览器的滚动条来截图,截屏后可以进行进一步编辑,包括气泡标注、文字说明、拷贝等等。 分开的有点高,对于需要用的人自然有用,对于不需要的人,就一文不值。 主要是我好久才淘到这个小工具,所以即时分享出来,不用你们到处去找了。 立即下载

原文链接:http://wingeek.blog.51cto.com/1226974/450216/


IE网页截图是IE编程中的经典问题。 IE9 beta发布之后我收到很多关于这方面的问题。 最近我把IE和Windows中这部分相关的代码重新架构了一下,使它们能够在IE9开启硬件加速的情况下完美兼容原来GDI函数。 趁着记忆还fresh, 写一个总结以供大家参考。

主要有以下3个接口可以实现IE网页截图。

1) HRESULT IHTMLElementRender::DrawToDC(HDC hDC)

MSDN参考: http://msdn.microsoft.com/en-us/library/aa752273(VS.85).aspx

简单代码示例:

 
  1. IHTMLDocument3 *pDoc = ...;  //得到IHTMLDocument3指针  
  2. IHTMLElement *pDocElement = NULL;  
  3. pDoc->get_documentElement(&pDocElement );  
  4. IHTMLElementRender *pRender =  NULL;  
  5. pDocElement ->QueryInterface(IID_IHTMLElementRender, (void **) &pRender);  
  6. pDocElement->DrawToDC(hImageDC);  
  7.  

注意事项: Quirks 模式下,documentElement不存在, 请使用BODY元素。

优点: 可以画某个特定的HTML元素

缺点:

  • 需要判断是不是Quirks模式下,进而决定拿documentElement元素还是BODY元素的的指针;
  • 只能按目前屏幕显示大小截取,不支持缩放;
  • 在有些情况就是当网页由frames 组成或者是个内嵌的doc/pdf文档,该可能会失败;

 

2) HRESULT IViewObject::Draw( DWORD dwAspect, LONG lindex,  void * pvAspect, DVTARGETDEVICE * ptd, HDC hicTargetDev, HDC hdcDraw,  const LPRECTL lprcBounds,
const LPRECTL lprcWBounds, BOOL (*) (DWORD) pfnContinue, DWORD dwContinue )

MSDN参考:http://msdn.microsoft.com/en-us/library/ms688655(VS.85).aspx

简单代码示例:

 
  1. IHTMLDocument2* pDoc = ...;  // 得到IHTMLDocument2指针  
  2. IViewObject* pViewObject = NULL;  
  3. pDoc->QueryInterface(IID_IViewObject, (void**)pViewObject);  
  4. pViewObject->(DVASPECT_CONTENT, 1, NULL, NULL, hScreenDC, hImageDC, rcSource, NULL, NULL, 0); 

 优点: 可以缩放,IE会根据传入的lprcBounds自行缩放图片。

缺点:

  • 因为要计算缩放,速度会较慢;
  • 截取整个文档的可见区域,没法截取特定的元素
  • 有些第三方的ActiveX没有实现IViewObject接口,导致那些ActiveX没有出现在截图里面。

 

3) BOOL PrintWindow( hwnd,  HDC hdcBlt,  nFlags)

MSDN参考:http://msdn.microsoft.com/en-us/library/dd162869(VS.85).aspx

简单代码示例:

 
  1. IWebBrowser2* pIWebBrowser2 = ...; // 得到IWebBrowser2指针  
  2. HWND hTridentWnd= NULL;    
  3. IOleWindow* pOleWin = NULL;  
  4. pIWebBrowser2->QueryInterface(IID_PPV_ARGS(&pOleWin));  
  5. pOleWin->GetWindow(&hTridentWnd); // 得到Trident窗口handle (类名"Internet Explorer_Server")  
  6. ::PrintWindow(hTridentWnd, hImageDC, PW_CLIENTONLY); 

优点: 内容完整,就算ActiveX没有实现IViewObject接口,也会被截图。

缺点:

  • 只能按目前屏幕显示大小截取,不支持缩放;
  • 速度不如IHTMLElementRender::DrawToDC 

 

注:以上代码示例都是简化版,实际使用请检查函数返回值以及指针有效性。

总结

综合考虑, PrintWindow 是首选, 简单而且内容完整。 如果你希望得到缩放的结果,那选择IViewObject::Draw。 如果你想要对特定某个元素截图, 那选择IHTMLElementRender::DrawToDC。


《解锁GCC版本选择的奥秘:从入门到精通》 GCC 版本的选择是一项复杂而关键的决策,犹如一场精心策划的战略布局,贯穿于软件开发的整个生命周期。从项目需求与兼容性的深度考量,到性能与稳定性的权衡抉择,再到硬件与系统适配的精准对接,每一个环节都紧密相连,相互影响。在游戏开发行业,对性能的极致追求促使开发者青睐较新的 GCC 版本,以实现更流畅的游戏体验和更震撼的视觉效果;科学计算领域则依赖于 GCC 版本对复杂数学运算的高效优化,以应对大规模数据处理的挑战;嵌入式开发行业因硬件资源的限制和对稳定性的严苛要求,通常选择经过长期验证的稳定版本; 阅读详情

相关推荐

深入NAND Flash信号与接口:结合ONFI 5.0协议,聊聊DBI、ODT和差分信号到底在解决什么实际问题

本文深入探讨了NAND Flash信号与接口设计,结合ONFI 5.0协议,详细解析了DBI、ODT和差分信号等技术如何解决高速数据传输中的信号完整性问题。通过实际案例和数据,展示了这些技术在降低功耗、减少噪声和提升抗干扰能力方面的显著效果,为存储工程师提供了宝贵的实践参考。

weixin_33736649的博客 342

浏览器如何截图整个滚动屏 ?

【1】将浏览器滚动条滚动到顶部。 【2】按下 F12 ,打开开发者窗口(方式二:鼠标右键,点击【检查】)。 【3】按下 Ctrl + Shift + P,弹出浏览器指令窗口。 【4】在指令窗口中输入:Capture full size screenshot,选择对应项。 【5】这时候浏览器就会触发下载整个浏览器整个长屏页面了。 【6】下面是效果图。 ...

小白一个 1万+

华为防火墙介绍和原理,配置详细解析

在出向外网的流量中,我们使用默认路由来指定默认的出口,并且使用nat地址转换,而在外网中,我们使用ISIS协议来进行路由的学习和更新,让外网可以访问到dmz非军事化区域的server1服务器。并进行NAT转换,实现了内部IP地址和外部IP地址之间的映射,以便内部网络可以与外部网络进行通信。网络地址转换(NAT):防火墙可实现网络地址转换,将内部私有IP地址转换成公共IP地址,以隐藏网络拓扑结构,增加网络安全性。确定安全需求:根据企业的安全需求和策略,确定防火墙的配置目标和规则。

外游者 5097

浏览器实现滚动截屏

工作日志:实现浏览器滚动截屏,并且是指定的iframe在跨域的情况下。 首先拿到这个需求的时候,想了一下,实现滚动截屏并不难,难的具体的情况如下, 在IE浏览器的情况下,在前端实现,并且iframe是跨域的,还要自动上传服务器,万事开头难,尝试了HTML2canvas之后发现,它并不能解决跨域问题,而且不同浏览器其图片会有差异,并且最重要的一点,svg图在IE浏览器中截图是空白。 当然,遇到需求,一定要解决,研究了IE设计接口,终于实现了,整体的思路是,拿到浏览器的接口对象,使用递归遍历,找到指定的ifra

qq_45469225的博客 6069

鸿蒙日历组件进阶:教你打造个性化日程管理界面(支持月份切换)

本文深入探讨了鸿蒙应用开发中自定义日历组件的构建方法。通过详解基于Grid的布局设计、核心日期算法、月份切换逻辑以及事件管理集成,指导开发者打造支持个性化日程管理的高性能日历界面,提升应用交互体验。

weixin_29207149的博客 66

Java开发者必看:Apache PDFBox实现PDF数字签名完整指南(附源码)

本文为Java开发者提供了使用Apache PDFBox实现PDF数字签名的完整指南。详细介绍了从环境配置、核心原理到完整代码实现的全过程,涵盖证书管理、签名位置计算、性能优化及实际应用案例,并附有可直接复用的源码,帮助开发者高效集成PDF数字签名功能。

o1p2q3r的博客 339

保存网页为图片——滚动截取IE(WebBrowse)

对IE进行编程一直觉得是相当可怕的事情,里面的接口、函数、事件之多,解释之乱,需要了解的方方面面知识之博,让我仿佛看到了微软就是造物主,因为它已成功制造了这样的混沌,弄就了宇宙的初始状态……     近来做个项目,要截取网页,试了获取mht,开始倒是成功了,但不知装了什么软件后,就再也无法保存成mht了,查了一堆资料,修复了一轮,又可以部份保存成功,如此不稳定肯定不能应用,放弃!不得不赞的是,网

TU2的专栏 5432

Linux yum源配置以及yum命令讲解

前面为大家介绍了RPM二进制包安装软件,RPM包安装的最大的缺点也提到过,就是依赖性太强,一旦遇到依赖问题,则需要我们手动解决包之间具有依赖性的问题,今天为大家介绍一种可自动解决包之间依赖关系的安装方式:yum。 yum 全称“Yellow dog Updater, Modified”,是一个专门为了解决包的依赖关系而存在的软件包管理器。就好像 Windows 系统上我们通常可以通过各种软件管家实现软件的一键安装、升级和卸载,yum就是Linux 系统中的一键安装工具。yum 解决依赖关系的基本逻辑是:yu

九派Linux的博客 2283

网页界面滚动截图(长图)的三种实用方法总结

简言 有些时候我们需要把整个网页的截图下来进行保存存档,但是像微信QQ等工具也只能截取看到的部分。当我们要截取的部分比价大时,这里在网上统计了三个简单方法,来和大家分享一下: QQ默认为Ctrl+Alt+A 微信默认为Alt+A(可以手动修改为自己喜欢的组合键位) 方法一:使用浏览器自带的截图功能 这里以360浏览器为例,打开360随意找一个网站,然后按键盘上的 CTRL+M 即可另存为网页图片,...

liuxiangyang_的博客 6万+

RK3568平台开发系列讲解(外设篇)CAN的使用

📢 本篇章带大家快速了解CAN的使用。

内核笔记 2352

Apache Kylin 命令注入漏洞复现(CVE-2020-1956)

Apache Kylin 中的静态 API 存在安全漏洞,可以将os命令与用户输入字符串连接起来,攻击者可以在Kylin没有任何保护或验证的情况下执行任何os命令。

0xSec 1558

IE网页截图技术笔记

网页截图技术似乎并不是很复杂,

学道 911

Centos 7 Linux 安装单机 Hadoop(HDFS):下载、安装、配置、测试

本文详细介绍了在 CentOS 7 系统上安装与配置单机 Hadoop(HDFS)的完整流程,涵盖 JDK 环境准备、Hadoop 安装包下载与部署、核心配置文件(core-site.xml、hdfs-site.xml 等)修改、SSH 免密登录设置、HDFS 格式化及服务启动,并通过命令行与 Web 界面验证 HDFS 和 YARN 功能,适合 Hadoop 初学者快速搭建本地测试环境。

寒水馨 · 轻量级技术文档 · hanshuixin.org 3234

[IE编程] IE网页截图技术总结

IE网页截图是IE编程中的经典问题。 IE9 beta发布之后我收到很多关于这方面的问题。 最近我把IE和Windows中这部分相关的代码重新架构了一下,使它们能够在IE9开启硬件加速的情况下完美兼容原来GDI函数。 趁着记忆还fresh, 写一个总结以供大家参考。主要有以下3个接口可以实现IE网页截图。 1) HRESULT IHTMLElementRender::DrawToDC(HDC hDC)MSDN参考:http://msdn.microsoft.com/en-us/library/aa75227

IE浏览器开发 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

html5 浏览器开发,[IE编程] IE网页截图技术总结 - IE编程, 浏览器开发, HTML5 - 优快云......

[IE编程] IE网页截图技术总结 收藏 此文于2010-12-10被推荐到优快云首页如何被推荐?IE网页截图是IE编程中的经典问题。 IE9 beta发布之后我收到很多关于这方面的问题。 最近我把IE和Windows中这部分相关的代码重新架构了一下,使它们能够在IE9开启硬件加速的情况下完美兼容原来GDI函数。 趁着记忆还fresh, 写一个总结以供大家参考。主要有以下3个接口可以实现IE网页...

weixin_42532938的博客 180

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

[IE编程] IE中对网页进行截图的编程接口

已更新,请读 [IE编程] IE网页截图技术总结http://blog.youkuaiyun.com/WinGeek/archive/2010/12/10/6067096.aspx

IE浏览器开发 4242

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Greenshot高级用法:如何捕获滚动网页和IE页面的终极指南

Greenshot是一款功能强大的免费截图工具,特别擅长捕获滚动网页和IE浏览器页面。对于需要完整保存网页内容、制作教程或文档的用户来说,掌握Greenshot的滚动截图技巧能极大提升工作效率。 ## 🖼️ 什么是滚动网页截图? 滚动网页截图是指能够完整捕获整个网页内容的技术,无论网页有多长,都能将其完整保存为一张图片。Greenshot通过智能的滚动捕获算法,自动拼接多个截图片段,生成完美

gitblog_00382的博客 605

实现当前IE的当前页面截图

由于最近工作比较忙没什么时间写文章,正好今天抽出点时间来写写博客。说实话做测试真是一个无聊的事情,哪怕它很重要但是真的很无聊。昨天英语课上还有人问什么才是Creative Bug, I think nobody find it expect you. This is the creative bug。总之在微软报bug也事件不容易的事情,特别你是flashman. 不过总是来也半年终于在最近的一个...

weixin_33725272的博客 148

如何把网页截图保持为本地图片?

今天分享下”如何把网页截图保持为本地图片?“这篇文章,文中根据实例编码详细介绍,或许对大家的编程之路有着一定的参考空间与使用价值,需要的朋友接下来跟着云南仟龙Mark一起学习一下吧。 具体代码如下所示: ​​​​ ​​<​​​​html​​​​>​​ ​​<​​​​head​​​​>​​ ​​<​​​​meta​​ ​​charset​​​​=​​​​"UTF-8"​​​​>​​ ​​<​​​​title​​​​>html2canvas_download&lt

yunduanaoligei的博客 382
上一篇: C++11(及现代C++风格)
下一篇: 在程序中使用libcurl的的静态链接库产生的未导出符号的错误
zzstack
博客等级 码龄15年 12粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值