但最近好幾個朋友都表示通過動態庫加載的方式在瀏覽器控件中使用不方便,也有朋友說不知道如何在瀏覽器控件中使用;本文旨在演示如何在瀏覽器控件中使用牛牛截圖;目前牛牛截圖控件的體積已經縮減到了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的註冊,可以根據不同的場景進行不同的註冊方式,目前看來,最方便的就是註冊表寫入方式了,可以直接在安裝包中加上這樣的操作即可。