1,317
社区成员
发帖
与我相关
我的任务
分享bool __fastcall ExeScript(TWebBrowser * Web, String jsName, TStringList *args, CComVariant *pVarResult)
{
IHTMLDocument2 *spDoc = (IHTMLDocument2 *)(void *)Web->Document;
if (spDoc == NULL) return false;
CComPtr<IDispatch> spScript;
HRESULT hr = spDoc->get_Script(&spScript);
ATLASSERT(SUCCEEDED(hr));
if (!SUCCEEDED(hr))
{
return false;
}
BSTR bstrMember = WideString(jsName).c_bstr();
DISPID dispid = NULL;
hr = spScript->GetIDsOfNames(IID_NULL, &bstrMember, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
if (!SUCCEEDED(hr))
{
ShowMessage(IntToHex((int)hr, 2));
spDoc->Release();
return false;
}
//...........bool __fastcall AddCode(TWebBrowser * Web, String sCode)
{
IHTMLDocument2 *pDoc = (IHTMLDocument2 *)(void *)Web->Document;
if (pDoc == NULL) return false;
IHTMLElement *pBody;
HRESULT hr = S_OK;
hr = pDoc->get_body(&pBody);
if( SUCCEEDED(hr))
{
WideString s = AnsiReplaceText(sCode, "<script", "<br><script defer");
pBody->insertAdjacentHTML(L"AfterBegin", s.c_bstr());
pDoc->Release();
return true;
}
pDoc->Release();
return false;
}bool __fastcall ExeScript(TWebBrowser * Web, String jsName, TStringList *args, CComVariant *pVarResult)
{
IHTMLDocument2 *spDoc = (IHTMLDocument2 *)(void *)Web->Document;
if (spDoc == NULL) return false;
CComPtr<IDispatch> spScript;
HRESULT hr = spDoc->get_Script(&spScript);
ATLASSERT(SUCCEEDED(hr));
if (!SUCCEEDED(hr))
{
return false;
}
BSTR bstrMember = WideString(jsName).c_bstr();
DISPID dispid = NULL;
hr = spScript->GetIDsOfNames(IID_NULL, &bstrMember, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
if (!SUCCEEDED(hr))
{
ShowMessage(IntToHex((int)hr, 2));
spDoc->Release();
return false;
}
const int arraySize = args->Count;
DISPPARAMS dispparams;
memset(&dispparams, 0, sizeof dispparams);
dispparams.cArgs = arraySize;
dispparams.rgvarg = new VARIANT[dispparams.cArgs];
for (int i = 0; i < arraySize; i++)
{
CComBSTR bstr = WideString(args->Strings[arraySize - 1 - i]).Copy(); // back reading
bstr.CopyTo(&dispparams.rgvarg->bstrVal);
dispparams.rgvarg->vt = VT_BSTR;
}
dispparams.cNamedArgs = 0;
EXCEPINFO excepInfo;
memset(&excepInfo, 0, sizeof excepInfo);
CComVariant vaResult;
UINT nArgErr = (UINT) - 1; // initialize to invalid arg
hr = spScript->Invoke(dispid, IID_NULL, 0, DISPATCH_METHOD, &dispparams, &vaResult, &excepInfo, &nArgErr);
spDoc->Release();
delete[] dispparams.rgvarg;
if (FAILED(hr))
{
return false;
}
if (pVarResult)
{
*pVarResult = vaResult;
}
return true;
}
String sCode = "<script type=\"text/javascript\">"
"function myFunction(str)"
"{"
" alert(str);"
" return str;" ;
"}" "</script>";
if (!AddCode(WebBrowser1, sCode)) ShowMessage("add error");
HRESULT GetIDsOfNames(
REFIID riid,
OLECHAR FAR* FAR* rgszNames,
unsigned int cNames,
LCID lcid,
DISPID FAR* rgDispId
);
//这样试试?
OLECHAR FAR* bstrMember= WideString(jsName).c_bstr();