如何使用IWebBrowser2接口正确调用onsubmit事件(使用c ++)

时间:2011-01-10 22:15:38

标签: c++ html com atl

我试图以编程方式调用onsubmit而不点击表单按钮。

首先我尝试简单地调用IHTMLFormElement接口的submit函数,但表单没有正确处理输入数据:

CComPtr<IHTMLFormElement> ppvForm;
ppvForm->submit();

我在文档中读到并说它提交函数不调用onsubmit事件,然后我尝试使用IHTMLFormElement接口的get_onsubmit提供的IDispatch调用方法调用onsubmit事件:

CComPtr<IHTMLFormElement> ppvForm;
...
_variant_t vResult;
_variant_t tvar;
hResult = ppvForm->get_onsubmit(&tvar); // <<< i get a NULL VARIANT here 

DISPPARAMS params = {0};
hResult = tvar.pdispVal->Invoke(
    DISPID_VALUE, 
    IID_NULL,
    LOCALE_SYSTEM_DEFAULT, 
    DISPATCH_METHOD, 
    &params, 
    &vResult, 
    NULL, 
    NULL);
if( SUCCEEDED(hResult) )
...

但是ppvForm-&gt; get_onsubmit调用返回带有NULL变量的S_OK ...(不知道为什么?!)

最后从IHTMLDocument4界面尝试了fireEvent:

HRESULT hrRes=S_FALSE;
CComPtr<IHTMLDocument4> piDoc;
...
VARIANT_BOOL varRet;
CComPtr<IHTMLEventObj>pEvent;
hrRes=piDoc->createEventObject(NULL, &pEvent);

_variant_t vtEvent(pEvent);
hrRes=piDoc->fireEvent(_bstr_t(_T("onsubmit")), &vtEvent, &varRet);

fireEvent现在总是返回E_INVALIDARG!不知道为什么?不知道我是否需要在vtEvent中放一些东西或者“onsubmit”字符串无效,不知道。

有人能指出我正确的方向还是告诉我我做错了什么?

1 个答案:

答案 0 :(得分:0)

如果get_onsubmit()正在返回S_OK和NULL处理程序,那么根本没有为表单分配的onsubmit事件处理程序。