但最近好几个朋友都表示通过动态库加载的方式在浏览器控件中使用不方便,也有朋友说不知道如何在浏览器控件中使用;本文旨在演示如何在浏览器控件中使用牛牛截图;目前牛牛截图控件的体积已经缩减到了150KB,更加便于在浏览器中应用了。
本文的相关示例代码包含在ActiveX控件以及Npapi插件中调用牛牛截图控件,ActiveX控件的写法就不多描述了,npapi插件的写法,此处直接在其相关的示例:npruntime示例上改动而成;这两个控件分别为:ActiveXWrapper.dll以及npcapture.dll,前者应用于IE浏览器,后者使用于FF及Chrome浏览器中。
在两个控件中,调用牛牛截图的相关代码,与之前的在应用程序中的方法一模一样:
typedef int (*FnStartScreenCapture)(const char* szAuth, const char* szDefaultSavePath, void* pCallBack, unsigned long hWndNotice, unsigned int noticeMsg);
FnStartScreenCapture gl_StartScreenCapture = NULL;
typedef int (*FnInitScreenCapture)(unsigned long trackerColor, unsigned long editBorderColor, int nTransparent, int flag);
FnInitScreenCapture gl_InitCapture = NULL;
string path = GetDllPath() + "\\NiuniuCapture.dll";
m_hModule = LoadLibrary(path.c_str());
DWORD dret = GetLastError();
gl_StartScreenCapture = (FnStartScreenCapture)GetProcAddress(m_hModule, "StartScreenCapture");
gl_InitCapture = (FnInitScreenCapture)GetProcAddress(m_hModule, "InitScreenCapture");
//设置截图边框的样式
gl_InitCapture(RGB(255, 0, 0), RGB(0, 174, 255), 180, 0);
STDMETHODIMP CCActiveXWrapper::TestControl(void)
{
//可以添加新的接口,由WEB传入地址,截图后,通过控件自动将图片发往服务器
//此处一定要找一个可写的路径来保存截图
gl_StartScreenCapture("niuniu", "", NULL, 0, 0);
return S_OK;
}
//在npcapture中的调用:
bool
ScriptablePluginObject::Invoke(NPIdentifier name, const NPVariant *args,
uint32_t argCount, NPVariant *result)
{
if(name == sCapture_id)
{
gl_StartScreenCapture("niuniu", "", NULL, 0, 0);
return true;
}
///..........................
只是此处要注意的一点是,确保浏览器控件能找到牛牛截图控件,我当前采用的办法是将牛牛截图控件与浏览器控件放在同一路径下,控件中读取自身所在路径,在本目录下读取加载牛牛截图控件,具体的大家看Demo中的代码吧。
下载地址:
牛牛截图控件_含浏览器控件调用示例
控件的测试:
1. 关于ActiveX控件,可以执行regsvr32来注册,同时需要把NiuniuCapture.dll复制到Windows目录下[ActiveX控件被复制至此目录下]
注册后,在IE浏览器中打开ActiveXWrapper.html,效果如下:
2. Npapi插件的注册,可以执行安装包中的niuniucapture_npapi.reg [先修改相应的目录]
如:当前npcapture.dll及NiuniuCapture.dll在目录:c:\testcapture\下,则注册表脚本为:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MozillaPlugins\@niuniu.com/npcaptrue]
"Path"="c:\\testcapture\\npcapture.dll"
以上脚本是在WIN7 64位下的,32位系统应该有所调整
在FF或者Chrome浏览器中打开test_npcapture.html,点击“capture”,效果如下:
以上仅演示如何调用,关于如何将牛牛截图控件与浏览器控件一并发布,网上有许多相关的文章,以下也提供相应的思路供参考:
1. 对于ActiveX控件,可以生成CAB包,CAB包中可以包含多个DLL的复制与注册,当然可以将咱们的NiuNiuCapture.dll包含在其中了
2. Npapi的打包同样支持多文件,具体可参考:
http://blog.csdn.net/zssureqh/article/details/9396435
3. 如果实在觉得多DLL麻烦,也可以考虑将NiuniuCapture.dll作为资源文件放入浏览器控件中,在运行时,根据判断是否需要将NiuniuCapture.dll释放到磁盘上[确定找到一个可写的目录],再加载释放出来的文件即可。
4. 关于Npapi的注册,可以根据不同的场景进行不同的注册方式,目前看来,最方便的就是注册表写入方式了,可以直接在安装包中加上这样的操作即可。