在VC里用webbrowser控件模拟自动点击按钮,有如下3种方法,但不是每时每刻都行的通的,哪种方便用哪种。
一、获取该按钮的网页元素接口,调用接口的click()函数
1.用httpWatch等工具获得该按钮的网页元素ID(strElementId)
2.获取网页元素集合,pRightDoc是该网页的文档接口
IHTMLElementCollection* pElemColl = NULL;
hr = pRightDoc->get_all( &pElemColl ); // 获取网页元素集合
3.点击按钮
void ButtonClick(IHTMLElementCollection * pElemColl, CString strElementId)
{
IDispatch *pDisp;
HRESULT hr;
VARIANT index;
VARIANT varID;
V_VT(&index) = VT_I4;
V_I4(&index) = 0;
varID = StringToVariant(strElementId);
hr = pElemColl->item(varID, index, &pDisp); // 获得按钮位置
if ( (hr == S_OK) && (pDisp != NULL) )
{
IHTMLElement* pElem = NULL; // 获得按钮元素接口
hr = pDisp->QueryInterface(IID_IHTMLElement, (void**)&pElem);
if ( (hr == S_OK) && (pElem != NULL) )
{
pElem->click(); // 点击按钮
pElem->Release();
}
pDisp->Release();
}
}
二、一般点击按钮后是为了执行一个JavaScipt函数,故可以直接执行该JavaScipt函数也可以达到点击按钮的效果。
1.用httpWatch等工具获得该网页的源码,如“确定”按钮的源码部分:
<input class=”e_button” type=”button” id=”button_ok” name=”button_ok”
value=”确定” οnclick=”jsFuction();” />
这样表明点击该按钮后执行jsFuction()函数。
CString strJsFuc = “jsFuction()”;
2.获得文档的父窗口接口,pRightDoc是该网页的文档接口
IHTMLWindow2* pWindow;
hr = pRightDoc->get_parentWindow(&pWindow);
JavaScipt函数
void ExecJavascipt(IHTMLWindow2* pWindow, CString strJsFuc)
{
VARIANT ret;
ret.vt = VT_EMPTY;
BSTR bstrCode = strJsFuc.AllocSysString();
BSTR bstrLanguage = SysAllocString(L”javascript”);
pWindow->execScript(bstrCode, bstrLanguage, &ret);
}
三、有些网页按钮还设置了快捷键,如按F2就表明点击该按钮,这样可以向该webbrowser控件发送F2键盘消息
1.获得webbrowser控件句柄
h_Wnd = ::FindWindow(NULL,”程序窗口标题”);
HWND hShell = ::FindWindowEx(h_Wnd,NULL,”Shell Embedding”,NULL);
HWND hView = ::FindWindowEx(hShell,NULL,”Shell DocObject View”,NULL);
HWND hIEServer = ::FindWindowEx(hView,NULL,”Internet Explorer_Server”,NULL);
2.发送F2键盘消息
::PostMessage(hIEServer,WM_KEYDOWN,VK_F2,0);
::PostMessage(hIEServer,WM_KEYUP,VK_F2,0);
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/38681.html