问题描述:将对话框中的回车消息传递到WebBrowser控件中去。
一开始的解决方案是:通过iwebbrowser2的成员函数get_HWND获取控件的句柄,然后通过SendMessage发送按键消息。但是这个方法在第一步就出现了问题,get_HWND返回的是E_FAIL。对于这个问题,找了一圈没有结果,但是偶然间遇到了启发--可以使用Windows的API实现相应的功能,如此就不用去传递消息了。
解决方法:使用IHTMLDocument的成员函数获取到页面按钮元素,然后模拟点击操作
do // 本代码以www.baidu.com为测试 { // 获取 IWebBrowser2 * m_spWebBrowser2 = CComPtr<IWebBrowser2>( m_pWebShow->GetWebBrowser2()) ; if (!m_spWebBrowser2) { break; } CComPtr<IDispatch> m_spDispatch; m_spWebBrowser2->get_Document( &m_spDispatch ); if ( !m_spDispatch ) { break; } CComQIPtr<IHTMLDocument3, &IID_IHTMLDocument3> pHtmlDoc3( m_spDispatch ); CComPtr<IHTMLElement> m_spElem; HRESULT hr = pHtmlDoc3->getElementById(CComBSTR(_T("su")), &m_spElem);// 此处修改submit按钮ID if(FAILED(hr) || !m_spElem) { break; } m_spElem->click(); } while (FALSE);