罗朝辉(飘飘白云)

关注嵌入式操作系统,移动平台,图形开发。-->加微博 ^_^

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  85 随笔 :: 0 文章 :: 169 评论 :: 0 Trackbacks

                                              截取网页快照的dll
                                    飘飘白云 (http://www.cppblog.com/kesalin
     
这个dll的功能是将在后台(也可指定参数是否显示)用安静模式(也就是不执行JavaScript,ActiveX以及Java程序)打开指定网址,并将网页截屏保存成png格式的图片。

dll src以及测试程序下载:点击这里

如下测试程序所示:
   


将得到我的cppblog首页的快照图:


下面来说说如何使用这个dll,我写了一个装载dll的帮助文件LuoSnapShotImport.h,只需要include这个头文件就很可以很方便地使用了。使用步骤如下:

 

Step 1: 包含相关头文件,载入dll文件
// Include header files for LuoSnapShot.
#include "include/LuoSnapShot.h"
#include 
"include/LuoSnapShotImport.h"

// Import lib
#ifdef _DEBUG
#pragma comment(lib, 
"bin/LuoSnapShot_Debug.lib")
#else
#pragma comment(lib, 
"bin/LuoSnapShot.lib")
#endif

Step 2: 创建snapshot对象,并装载 dll 并初始化,最后清理
LuoSnapShot::UActivator* g_pLuoSnapShot;

/**
* @brief      : Initialize LuoDnd
* @param      : 
* @return     : bool
*/

bool InitLuoSnapShot()
{
    HRESULT hRslt 
= LuoSnapShot::Activate_import(
        L
"activator",
        (
void**)&g_pLuoSnapShot);

    
if (FAILED(hRslt)) {
        
return false;
    }


    hRslt 
= g_pLuoSnapShot->Initialize();
    
if (FAILED(hRslt)) {
        g_pLuoSnapShot
->Uninitialize();
        g_pLuoSnapShot 
= NULL;
        
return false;
    }


    
return true;
}


/**
* @brief      : Uninitialize LuoDnd
* @param      : 
* @return     : 
*/

void UninitLuoSnapShot()
{
    
if (g_pLuoSnapShot != NULL) {
        g_pLuoSnapShot
->Uninitialize();
        g_pLuoSnapShot 
= NULL;
    }

}



Step 3: 调用snapShot的AddWebItem函数,截取网页快照。参数WebItem的详细说明如下:

Uri      -- 以http://或https://打头的网址
Path    -- 保存快照图片的绝对路径
ImageWidth -- 保存快照图片的宽度
ImageHeight -- 保存快照图片的高度
Target    --  消息回调窗口(默认为NULL)
Message -- 回调消息(默认为)
Cookie  -- 此次截屏的辨识符号(默认为0)
ShotDelay -- 截屏延迟时间
NavigateTimeout -- 网页打开超时时间
Show  -- 截屏的时候是否显示网页(调试用)
PageWidth -- 如果Show  为true,前台显示网页的宽度
PageHeight -- 如果Show  为true,前台显示网页的高度

    void capture(const LPCWSTR url, const LPCWSTR savePath)
    
{
        
if (g_pLuoSnapShot) {
            LuoSnapShot::WebItem item;
            item.Uri 
= url;
            item.Path 
= savePath;
            item.Show 
= true;

            item.ImageWidth 
= 640;
            item.ImageHeight 
= 480;

            item.Target 
= *this;
            item.Message 
= LuoSnapShot::WM_LUO_SNAPSHOT_CALLBACK;
            item.Cookie 
= ++count;

            item.PageWidth 
= 1024;
            item.PageHeight 
= 768;

            item.ShotDelay 
= 2 * 1000;
            item.NavigateTimeout 
= 20 * 1000;

            g_pLuoSnapShot
->AddWebItem(&item);
        }

    }

posted on 2008-12-01 12:25 罗朝辉 阅读(3009) 评论(10)  编辑 收藏 引用 所属分类: 网络相关Windows

评论

# re: 截取网页快照的dll 2008-12-01 12:57 肥仔
很有创意,且提供源代码
可惜没有这方面的需求,用不上了。  回复  更多评论
  

# re: 截取网页快照的dll 2008-12-02 12:38 true
很好的东西,值得研究  回复  更多评论
  

# re: 截取网页快照的dll 2008-12-02 15:59 回复
问题是还是不能截取全部的
只能截取一个窗体的  回复  更多评论
  

# re: 截取网页快照的dll 2008-12-02 16:45 飘飘白云
@回复

不能截取全部的,只能截取一个窗体的~~  回复  更多评论
  

# re: 截取网页快照的dll 2008-12-03 11:52 回复
这样的话就意义不大了

你可以考虑下,把整个网页都截取出来

简单点的方法就是不停的滚动截屏,直到底部,最后再拼接  回复  更多评论
  

# re: 截取网页快照的dll 2008-12-03 19:06 小不点
貌似 codeproject上有个用gdi+实现了一个~  回复  更多评论
  

# re: 截取网页快照的dll 2008-12-03 19:57 飘飘白云
~~@小不点

gdi+只是在保存图片的时候用到了,主要的还是在web control的运用上,codeproject上那个不知道你是不是说这个(貌似不是用gdi+):http://www.codeproject.com/KB/IP/htmlimagecapture.aspx,他是使用MFC封装的CHtmlView来实现,我这个没有使用MFC  回复  更多评论
  

# re: 截取网页快照的dll 2008-12-03 20:56 小不点
http://www.codeproject.com/KB/GDI-plus/WebPageSnapshot.aspx
我看的是这个,他好像是用的MFC中的HTML...  回复  更多评论
  

# re: 截取网页快照的dll 2009-04-22 09:20 accesine
这个dll写的精彩绝伦啊  回复  更多评论
  

# re: 截取网页快照的dll 2011-07-02 06:12 chunchun
谢谢,应该可以用在IIS服务器上做自动截图吧。

试试看。


我以前包裹IE干这事的时候,貌似在IIS下不成功,因为hwnd的问题。  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理