//使用CComQIPtr智能指针,它们在销毁的时候,不需要手动去Replease释放接口指针,
//在赋值的时候,也不需要手动的AddRef,
//在出现异常的时候,会自动处理异常,而不需要额外的异常处理代码。
//但是记住:重复赋值的时候,需要提前手动Replease释放
CComQIPtr<IWebBrowser2> pWebBrowser2;
CComQIPtr<IDispatch> pDocDisp;
CComQIPtr<IHTMLDocument3> pHtmlDoc3;
CComQIPtr<IHTMLElement> pHtmlElement;//负责获取元素
CComQIPtr<IHTMLElement2> pElement2;//负责获取坐标
CComQIPtr<IHTMLRect> HtmlRect;
HRESULT hr = S_FALSE;
//用COM接口来设置元素
pWebBrowser2 = m_pBrowser->GetWebBrowser2();
if (!pWebBrowser2)
{
return false;
}
hr = pWebBrowser2->get_Document(&pDocDisp);
if (FAILED(hr) || NULL == pDocDisp)
{
return false;
}
hr = pDocDisp->QueryInterface(IID_IHTMLDocument3, (void**)&pHtmlDoc3);
if (FAILED(hr) || NULL == pHtmlDoc3){
return false;
}
hr = pHtmlDoc3->getElementById(L"username", &pHtmlElement);
if (FAILED(hr) || NULL == pHtmlElement){
return false;
}
//上次赋值过了,这次赋值需要提前Release释放
pHtmlElement.Release();
hr = pHtmlDoc3->getElementById(L"password", &pHtmlElement);
if (FAILED(hr) || NULL == pHtmlElement){
return false;
}