VC中利用webbrowser执行自定义JS函数

        转载请注明文章出处与作者信息。

       最近查找了很多资料来执行自定义的JS函数,例如:function TC(){var t=document.title;return t;} 。 网上搜索的资料有蛮多,但是一直没能很快的完成。花了2天时间,终于完成了。特发博记忆与分享下。

        1、首先在源文件里 加入导入库和空间声明:

             

#import "C:\\windows\\system32\\msscript.ocx"
using namespace MSScriptControl;



        2、在程序启动时 初始化COM组件,退出时 释放COM组件:

              

//初始化COM组件
 CoInitialize(NULL);


释放COM
 CoUninitialize();

 

         3、主要的实现代码。

        HRESULT hr;
	IScriptControlPtr pScriptControl(__uuidof(ScriptControl));
	LPSAFEARRAY psa;
	SAFEARRAYBOUND rgsabound[]       = { 1, 0 }; // 1 elements, 0-based
	int i;
	psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
	if (!psa)
	{
		return ;
	}
	VARIANT vFlavors[1];
	for (i = 0; i < 1; i++)
	{
		VariantInit(&vFlavors[i]);
		V_VT(&vFlavors[i]) = VT_BSTR;
	}
	V_BSTR(&vFlavors[0]) = SysAllocString(L"TC_P");
	long lZero = 0;
	hr = SafeArrayPutElement(psa, &lZero,&vFlavors[0]);
	for(i=0;i<1;i++)
	{
		SysFreeString(vFlavors[i].bstrVal);
	}
	pScriptControl->Language = "JScript";
	pScriptControl->AllowUI = TRUE;
	_bstr_t exp = L"function TC(){var t=document.title;return t;}";
	pScriptControl->AddCode(exp);

	IHTMLDocument2   *objDocument1=NULL;
	IHTMLWindow2* pIHTMLWindow1 = NULL;
	objDocument1=(IHTMLDocument2 *)pBrowser.get_Document();
	if(objDocument1)
	{
		objDocument1->get_parentWindow(&pIHTMLWindow1);
		pScriptControl->AddObject("window", pIHTMLWindow1, VARIANT_TRUE);  //这几句代码很重要,没有的话,执行会报错。
	}
	_variant_t outpar = pScriptControl->Run("TC", &psa);   //outpar是js函数执行后的返回值
	// DWORD err = ::GetLastError();
	_bstr_t bstrReturn = (_bstr_t)outpar.bstrVal;
	char *pResult = (char *)bstrReturn;
	SafeArrayDestroy(psa);
	return ;

上面代码是综合了网上很多盆友的思路和代码编写而成。感谢互联网与大鸟们的分享精神!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值