WebBrowser keystroke

问题描述:将对话框中的回车消息传递到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);

  

你可能感兴趣的:(WebBrowser keystroke)