📄 webctl.cpp
字号:
for(long i=0;i<=(p-1);i++)
{
V_VT(&id) = VT_I4;
V_I4(&id) = i;
V_VT(&index) = VT_I4;
V_I4(&index) = 0;
if(SUCCEEDED(pElementCol->item(id,index, &spDispatch)))
// AfxMessageBox("2");
if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLFormElement,(void**)&pFormElement)))
{
// AfxMessageBox("IHTMLFormElement");
long q=0;
if(SUCCEEDED(pFormElement->get_length(&q)))
for(long j=0;j<=(q-1);j++)
{
V_VT(&id) = VT_I4;
V_I4(&id) = j;
V_VT(&index) = VT_I4;
V_I4(&index) = 0;
if(SUCCEEDED(pFormElement->item(id,index, &spDispatch)))
if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLInputTextElement,(void**)&pInputElement)))
{
//AfxMessageBox("IHTMLInputTextElement");
CComBSTR value;
CComBSTR type;
//这个是我添加的程序
//CComBSTR test2(_T("hello zhanglei"));
//到达这个地方
pInputElement->get_type(&type);
CString strtype(type);
strtype.MakeUpper();
if(strtype.Find("TEXT")!=-1)
{
//这个是从网页当中得到text的值
pInputElement->get_value(&value);
//pInputElement->put_value(test2);
CString str(value);
if(!str.IsEmpty())
{
//写进列表框
// m_ctrlIE.InsertItem(0, _bstr_t(value)+_bstr_t(" 【可能是用户名或其他需提交的内容】"));
//写进XML文件
modify("OneRecord//text",str.GetBuffer(0));
}
}
else if(strtype.Find("PASSWORD")!=-1)
{
pInputElement->get_value(&value);
CString str(value);
if(!str.IsEmpty())
{
//写进列表框
// m_ctrlIE.InsertItem(0, _bstr_t(value) + _bstr_t(" 【应该是密码】"));
//写进XML文件
modify("OneRecord//password",str.GetBuffer(0));
}
}
}
}
}
}
}
}
}
}
}
}
}
int CWebCtrl::modify(const char *nodeName, char *nodeValue)
{
::CoInitialize(NULL);
MSXML2::IXMLDOMDocumentPtr pDoc;
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument));
int rtval=0;
if(!(SUCCEEDED(hr)))
{
rtval=0;
return rtval;
}
hr=pDoc->load("test.xml");// 文件名。
if(!SUCCEEDED(hr))
{
MSXML2::IXMLDOMElementPtr pPolicyNode=pDoc->GetdocumentElement();
MSXML2::IXMLDOMElementPtr pSelectNode=pPolicyNode->selectSingleNode(nodeName);
pSelectNode->Puttext(nodeValue);
pDoc->save("test.xml");
pPolicyNode.Release();
pSelectNode.Release();
rtval=1;
}
pDoc.Release();
::CoUninitialize();
return rtval;
}
void CWebCtrl::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
// Read();
COleControl::OnTimer(nIDEvent);
}
int CWebCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
if (m_spSHWinds == NULL){
if (m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) != S_OK){
MessageBox("Failed");
CoUninitialize();
}
}
SetTimer(1,1000,NULL);
CRect rect;
GetWindowRect(&rect);
m_btn.Create("Hello",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,rect,this,100);
m_btn.MoveWindow(&rect);
m_btn.ShowWindow(SW_SHOWNORMAL);
// SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());
return 0;
}
void CWebCtrl::Write()
{
// TODO: Add your dispatch handler code here
VARIANT id, index;
CComPtr<IDispatch> spDispatch;
CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> pDoc2;
CComPtr<IHTMLElement> pElement;
CComPtr<IHTMLElementCollection> pElementCol;
CComPtr<IHTMLFormElement> pFormElement;
CComPtr<IHTMLInputTextElement> pInputElement;
// TODO: Add your control notification handler code here
// int n = m_ctrlIE.GetItemCount();//GetCount();
// for (int i = 0; i < n; i ++){
// IWebBrowser2 *pBrowser = (IWebBrowser2 *)m_ctrlIE.GetItemData(i);
// if (pBrowser){
// pBrowser->Release();
// }
// }
//
// m_ctrlIE.DeleteAllItems();
if (m_spSHWinds){
//得到浏览器的个数
int n = m_spSHWinds->GetCount();
//遍历每一个浏览器
for (int i = 0; i < n; i++){
_variant_t v = (long)i;
IDispatchPtr spDisp = m_spSHWinds->Item(v);
SHDocVw::IWebBrowser2Ptr spBrowser(spDisp); //生成一个IE窗口的智能指针
if (spBrowser){
//添加的程序,得到IE的URL
//spBrowser->get_LocationURL();
if (SUCCEEDED(spBrowser->get_Document( &spDispatch)))
pDoc2 = spDispatch;
if(pDoc2!=NULL)
{ CComBSTR bstr;
pDoc2->get_URL(&bstr);
CString myURL(bstr);
char *pchar;
pchar=this->GetValueFromXml("OneRecord//URL");
if(!strcmp(myURL.GetBuffer(0),pchar))
//这个时间说明我们打开的是一个真正的IE窗口
{
if (SUCCEEDED(pDoc2->get_forms(&pElementCol)))
{
// AfxMessageBox("IHTMLElementCollection");
long p=0;
if(SUCCEEDED(pElementCol->get_length(&p)))
if(p!=0)
{
// AfxMessageBox("1");
for(long i=0;i<=(p-1);i++)
{
V_VT(&id) = VT_I4;
V_I4(&id) = i;
V_VT(&index) = VT_I4;
V_I4(&index) = 0;
if(SUCCEEDED(pElementCol->item(id,index, &spDispatch)))
// AfxMessageBox("2");
if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLFormElement,(void**)&pFormElement)))
{
// AfxMessageBox("IHTMLFormElement");
long q=0;
if(SUCCEEDED(pFormElement->get_length(&q)))
for(long j=0;j<=(q-1);j++)
{
V_VT(&id) = VT_I4;
V_I4(&id) = j;
V_VT(&index) = VT_I4;
V_I4(&index) = 0;
if(SUCCEEDED(pFormElement->item(id,index, &spDispatch)))
if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLInputTextElement,(void**)&pInputElement)))
{
//AfxMessageBox("IHTMLInputTextElement");
CComBSTR value;
CComBSTR type;
//这个是我添加的程序
//CComBSTR test2(_T("hello zhanglei"));
//到达这个地方
pInputElement->get_type(&type);
CString strtype(type);
strtype.MakeUpper();
if(strtype.Find("TEXT")!=-1)
{
//这个是从XML文件向网页内写东西
char *pchar;
pchar=this->GetValueFromXml("OneRecord//text");
CComBSTR textvalue(_T(pchar));
pInputElement->put_value(textvalue);
}
else if(strtype.Find("PASSWORD")!=-1)
{
//这个是从XML文件向网页内写东西
char *pchar;
pchar=this->GetValueFromXml("OneRecord//password");
CComBSTR textvalue(_T(pchar));
pInputElement->put_value(textvalue);
}
}
}
}
}
}
}
}
}
}
}
}
}
char * CWebCtrl::GetValueFromXml(char *nodeName)
{
char* nodeValue=NULL;
::CoInitialize(NULL);
MSXML2::IXMLDOMDocumentPtr pDoc;
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument));
if(!(SUCCEEDED(hr)))
{
return nodeValue;
}
hr=pDoc->load("test.xml");
if(!SUCCEEDED(hr))
{
MSXML2::IXMLDOMElementPtr pPolicyNode=pDoc->GetdocumentElement();
MSXML2::IXMLDOMElementPtr pSelectNode=pPolicyNode->selectSingleNode(nodeName);
nodeValue = _com_util::ConvertBSTRToString(pSelectNode->text);
pPolicyNode.Release();
pSelectNode.Release();
}
pDoc.Release();
::CoUninitialize();
return nodeValue;
}
void CWebCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
Write();
COleControl::OnLButtonDown(nFlags, point);
}
void CWebCtrl::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
MessageBox("hahaha");
COleControl::OnKeyDown(nChar, nRepCnt, nFlags);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -