zoukankan      html  css  js  c++  java
  • C++通过Webbrowser调用JavaScript

    // 定义 CWebBrowser2

    Code

     // 装载包含JavaScript的Html

    Code

     // 调用JavaScript

    Code

     // C++调用JavaScript

    Code

     ////////////////////////////////////////////////////////////

    // 简洁改进

    HRESULT CXXUtil::CallJsFunc(const CComPtr<IHTMLDocument2> spDocument2, 
                                        const CString &strJsFuncName, const std::list<CString> &params, CComVariant *pVarResult)
    {
        HRESULT hr = S_FALSE;
    
        if (spDocument2)
        {
            CComPtr<IDispatch> spScript = NULL;
            hr = spDocument2->get_Script(&spScript);
    
            if (SUCCEEDED(hr) && spScript)
            {
                CComBSTR bstrFunc(strJsFuncName);
                DISPID dispid = 0;
                hr = spScript->GetIDsOfNames(IID_NULL, &bstrFunc, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
    
                if(SUCCEEDED(hr))
                {
                    const size_t paramCnt = params.size();
                    DISPPARAMS dispparams = {0};
                    //memset(&dispparams, 0, sizeof dispparams);
                    dispparams.cArgs = paramCnt;
                    dispparams.cNamedArgs = 0;
                    dispparams.rgvarg = new VARIANT[dispparams.cArgs];
    
                    for(size_t i = 0; i < paramCnt; i++)
                    {
                        std::list<CString>::const_iterator cit = params.begin();
                        std::advance(cit, (paramCnt - 1 - i));// back reading
                        CComBSTR bstrParam = (*cit).GetString();
                        dispparams.rgvarg[i].vt = VT_BSTR;
                        dispparams.rgvarg[i].bstrVal = bstrParam.Detach();
                    }
    
                    EXCEPINFO excepInfo = {0};
                    //memset(&excepInfo, 0, sizeof excepInfo);
                    CComVariant vaResult;
                    UINT nArgErr = (UINT)0; //-1;  // initialize to invalid arg
    
                    hr = spScript->Invoke(dispid, IID_NULL, 0 , DISPATCH_METHOD, &dispparams, &vaResult, &excepInfo, &nArgErr);
    
                    // cleanup
                    for(UINT ix = 0; ix < dispparams.cArgs; ++ix)
                    {
                        ::SysFreeString(dispparams.rgvarg[ix].bstrVal);
                    }
                    delete [] dispparams.rgvarg;
    
                    if(SUCCEEDED(hr) && pVarResult)
                    {
                        *pVarResult = vaResult;
                    }
                }
            }
        }
    
        return hr;
    }
  • 相关阅读:
    Zabbix poller processes more than 75% busy
    标签无效 "/zabbix_export/date": "YYYY-MM-DDThh:mm:ssZ" 预计。
    Received empty response from Zabbix Agent at[172.16.1.51]. Assuming that agent dropped connection because of access permissions
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    Received empty response from Zabbix Agent at [172.16.1.7]...
    Too many open files
    Object.defineProperty之observe实现
    深拷贝 deepAssign
    提交操作自动遮蔽实现之ajax
    js检测输入域的值是否变化
  • 原文地址:https://www.cnblogs.com/dlbrant/p/1391467.html
Copyright © 2011-2022 走看看