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

📄 myieview.cpp

📁 自动投票程序: web 控件操作例程
💻 CPP
字号:
// myieView.cpp : CmyieView 类的实现
//

#include "stdafx.h"
#include "myie.h"

#include "myieDoc.h"
#include "myieView.h"
#include ".\myieview.h"
#include "Config.h"
#include <comutil.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CmyieView

IMPLEMENT_DYNCREATE(CmyieView, CHtmlView)

BEGIN_MESSAGE_MAP(CmyieView, CHtmlView)
	// 标准打印命令
	ON_COMMAND(ID_FILE_PRINT, CHtmlView::OnFilePrint)
	ON_COMMAND(ID_GENERRATE, OnGenerrate)
	ON_WM_TIMER()
	ON_COMMAND(ID_BUTTON32773, OnButton32773)
	ON_COMMAND(ID_START, OnStart)
	ON_COMMAND(ID_CONFIG, OnConfig)
END_MESSAGE_MAP()

// CmyieView 构造/析构

CmyieView::CmyieView()
: m_nSec(100)
, m_nUserID(630)
{
	// TODO: 在此处添加构造代码

}

CmyieView::~CmyieView()
{
}

BOOL CmyieView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
	// 样式

	return CHtmlView::PreCreateWindow(cs);
}

void CmyieView::OnInitialUpdate()
{
	CHtmlView::OnInitialUpdate();
	CString szUrl;
	szUrl.Format(_T("http://www.scient.com.cn/vote.asp?id=%ld"),m_nUserID);
	Navigate(szUrl,NULL,NULL);
	//GetQAList();
}


// CmyieView 打印



// CmyieView 诊断

#ifdef _DEBUG
void CmyieView::AssertValid() const
{
	CHtmlView::AssertValid();
}

void CmyieView::Dump(CDumpContext& dc) const
{
	CHtmlView::Dump(dc);
}

CmyieDoc* CmyieView::GetDocument() const // 非调试版本是内联的
{
		ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CmyieDoc)));
	return (CmyieDoc*)m_pDocument;
}
#endif //_DEBUG


// CmyieView 消息处理程序
void CmyieView::OnGenerrate()
{
//	static ncount=0;
//	ncount++;
//	if (ncount==9)
//	{
//		ncount=1;
//   Navigate(_T("http://www.scient.com.cn/vote.asp?id=630"),NULL,NULL);
//	}
	IHTMLDocument2* pHtmlDoc2 = (IHTMLDocument2*)GetHtmlDocument();
	CComQIPtr< IHTMLElementCollection > spElementCollection;
	CComVariant vcValue,vcName=_T("answer"),VipName=_T("ip"),VipValue;
	int foundAnswer=0;
	CString strAnswer;
	strAnswer=GetAnswer();
	if ( strAnswer!=_T(""))
	{
		if (strAnswer==_T("return"))
		{
			GoBack();
			Refresh();///
		}
		vcValue=strAnswer;
		VipValue=GetIP();
		foundAnswer=1;
	}
	else
	{
		//Navigate(_T("http://www.scient.com.cn/vote.asp?id=630"),NULL,NULL);
		Refresh();
		return;
	}
	if( pHtmlDoc2)
	{
		HRESULT hr = S_OK;
		hr=pHtmlDoc2->get_forms(&spElementCollection);

		if ( FAILED( hr ) )
		{
			keybd_event(VK_RETURN,0,0,0);
			keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
			pHtmlDoc2->Release();  
			return;
		}
		long nFormCount=0;				//取得表单数目
		hr = spElementCollection->get_length( &nFormCount );
		if ( FAILED( hr ) )
		{
			pHtmlDoc2->Release();  
			return;
		}

		for(long i=0; i<nFormCount; i++)
		{
			IDispatch *pDisp = NULL;	//取得第 i 项表单
			hr = spElementCollection->item( CComVariant( i ), CComVariant(), &pDisp );
			if ( FAILED( hr ) )		continue;

			CComQIPtr< IHTMLFormElement > spFormElement = pDisp;
			pDisp->Release();

			long nElemCount=0;			//取得表单中 域 的数目
			hr = spFormElement->get_length( &nElemCount );
			if ( FAILED( hr ) )		continue;

			for(long j=0; j<nElemCount; j++)
			{
				CComDispatchDriver spInputElement;	//取得第 j 项表单域
				hr = spFormElement->item( CComVariant( j ), CComVariant(), &spInputElement );
				if ( FAILED( hr ) )	continue;

				CComVariant vName,vVal,vType;		//取得表单域的 名,值,类型
				hr = spInputElement.GetPropertyByName( L"name", &vName );
				if( FAILED( hr ) )	continue;

				if(vName==vcName)
					spInputElement.PutPropertyByName( L"value", &vcValue);
				if(vName==VipName)
				{
					spInputElement.PutPropertyByName( L"value", &VipValue);					
				}
				
			}
			if (foundAnswer==1)
			{
                spFormElement->submit();
				//		keybd_event(VK_RETURN,0,0,0);
				//		keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
				//		keybd_event(VK_RETURN,0,0,0);
				//		keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
			//	keybd_event(0x4E ,0, 0 ,0);
			//	keybd_event(0x4E ,0, KEYEVENTF_KEYUP ,0);
			//	keybd_event(VK_SPACE ,0, 0 ,0);
			//	keybd_event(VK_SPACE ,0, KEYEVENTF_KEYUP ,0);
			//	keybd_event(0x4E ,0, 0 ,0);
			//	keybd_event(0x4E ,0, KEYEVENTF_KEYUP ,0);

			}
			else
			{
				//Navigate(_T("http://www.scient.com.cn/vote.asp?id=630"),NULL,NULL);
				Refresh();
			}
		pHtmlDoc2->Release();
		}
	}
}

int CmyieView::recongnize(COLORREF cr)
{
	int n=-1;
	switch (cr)
	{
	case 19338:
		n=0;
		break;
	case 217:
		n=1;
		break;
	case 9671:
		n=2;
		break;
	case 10775810:
		n=3;
		break;
	case 22690:
		n=4;
		break;
	case 14499328:
		n=5;
		break;
	case 148683:
		n=6;
		break;
	case 6488226:
		n=7;
		break;
	case 4563973:
		n=8;
		break;
	case 15099648:
		n=9;
	}
	return n;
}
static int nIsready=0;
void CmyieView::OnTimer(UINT nIDEvent)
{
	keybd_event(0x4E ,0, 0 ,0);
	keybd_event(0x4E ,0, KEYEVENTF_KEYUP ,0);
	keybd_event(0x4E ,0, 0 ,0);
	keybd_event(0x4E ,0, KEYEVENTF_KEYUP ,0);
	keybd_event(0x4E ,0, 0 ,0);
	keybd_event(0x4E ,0, KEYEVENTF_KEYUP ,0);
	keybd_event(0x4E ,0, 0 ,0);
	keybd_event(0x4E ,0, KEYEVENTF_KEYUP ,0);
		keybd_event(VK_SPACE ,0, 0 ,0);
		keybd_event(VK_SPACE ,0, KEYEVENTF_KEYUP ,0);
		keybd_event(0x4E ,0, 0 ,0);
		keybd_event(0x4E ,0, KEYEVENTF_KEYUP ,0);
		keybd_event(0x4E ,0, 0 ,0);
		keybd_event(0x4E ,0, KEYEVENTF_KEYUP ,0);
		keybd_event(0x4E ,0, 0 ,0);
		keybd_event(0x4E ,0, KEYEVENTF_KEYUP ,0);
		keybd_event(0x4E ,0, 0 ,0);
		keybd_event(0x4E ,0, KEYEVENTF_KEYUP ,0);
  if (nIsready==1)
  {
	  OnGenerrate();
	  nIsready=0;
  }

	CHtmlView::OnTimer(nIDEvent);
}

CString CmyieView::GetCode()
{

	CRect SrcRect;
	GetClientRect(&SrcRect);
	HDC       hSrcDC, hMemDC;      	// 内存设备描述表	
	HBITMAP    hBitmap, hOldBitmap;   		// 位图句柄	  	

	int    nWidth, nHeight;      	// 位图宽度和高度
	hSrcDC=GetDC()->m_hDC;
	hMemDC = CreateCompatibleDC(hSrcDC);	
	nWidth = SrcRect.Width();	
	nHeight = SrcRect.Height();		
	hBitmap = CreateCompatibleBitmap(hSrcDC, nWidth, nHeight);	// 创建一个与源窗口设备描述表兼容的位图

	hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);// 把新位图选到内存设备描述表中
	BitBlt(hMemDC, 0, 0, nWidth, nHeight,hSrcDC, 0, 0, SRCCOPY);	// 把屏幕设备描述表拷贝到内存设备描述表中	
	CDC * pDc;
	pDc=CDC::FromHandle(hMemDC);
	COLORREF cr,crtype[6];
	int r,g,b;
	//int oldr,oldg,oldb;
	r=g=b=0;
	for (int j=0;j<6;j++)
	{
		crtype[j]=0;
	}
	int p=0,basen=190,basey=26;
	CString str,strbg="",str1="";

	for(int i=basen+0;i<basen+10;i++)
	{
		cr=pDc->GetPixel(i,basey+5);
		int dig=recongnize(cr);
		if (dig>-1)
		{
			crtype[p++]=dig;
			break;
		}
	}
	for(int i=basen+10;i<basen+20;i++)
	{
		cr=pDc->GetPixel(i,basey+5);
		int dig=recongnize(cr);
		if (dig>-1)
		{
			crtype[p++]=dig;
			break;
		}
	}
	for(int i=basen+20;i<basen+30;i++)
	{
		cr=pDc->GetPixel(i,basey+5);
		int dig=recongnize(cr);
		if (dig>-1)
		{
		    crtype[p++]=dig;
			break;
		}
	}
	for(int i=basen+30;i<basen+40;i++)
	{
		cr=pDc->GetPixel(i,basey+5);
		int dig=recongnize(cr);
		if (dig>-1)
		{
			crtype[p++]=dig;
			break;
		}
	}

	for (int h=0;h<4;h++)
	{
		CString tmp;
		tmp.Format("%d",crtype[h]);
		strbg+=tmp;
	}
	//善后工作	
	DeleteDC(hSrcDC);
	DeleteDC(hMemDC);

	return strbg;

}

void CmyieView::OnButton32773()
{
	//MessageBox(GetAnswer());
	KillTimer(0);
	//
}

CString CmyieView::GetAnswer(void)
{
	CString    refString ;
	CComPtr<IDispatch>   spDisp   =   GetHtmlDocument();  
	if ( spDisp ) 
	{ 
		HGLOBAL   hMemory = GlobalAlloc(GMEM_MOVEABLE, 0); 
		if( NULL != hMemory ) 
		{ 
			CComQIPtr<IPersistStreamInit>   spPersistStream   =   spDisp; 
			if( spPersistStream ) 
			{ 
				CComPtr <IStream>   spStream; 
				if(SUCCEEDED(CreateStreamOnHGlobal(hMemory,   TRUE,   &spStream))) 
				{ 
					spPersistStream-> Save(spStream,   FALSE);      
					LPCTSTR   pstr   =   (LPCTSTR)   GlobalLock(hMemory); 
					if( pstr ) 
					{                       
						refString   =   pstr; 
						GlobalUnlock(hMemory); 
					} 
					::GlobalFree(hMemory);
				} 
			} 
		} 
	}
	CString szReturn=_T("");
	POSITION  hPos = NULL;
	CQaNode * pNode= NULL;
int start,end;
start=refString.Find("请输入验证码:");
end=refString.Find("请填写答案");
szReturn=refString.Mid(start+14,4) ;
//MessageBox(szReturn);
//	for( hPos = m_listQA.GetHeadPosition();
//		hPos != NULL; )请填写答案:
//	{
//		pNode = (CQaNode*) m_listQA.GetNext( hPos );
//		if( pNode == NULL )
//			break;
//		if (refString.Find(pNode->m_strQ)>0)
//		{
//			szReturn=pNode->m_strA;
//			break;
//		}
//		else
//		{
//			if (refString.Find(_T("alert(\'投票\')"))>0)
//			{
//				szReturn=_T("return");
//			}
//		}
//
//	}
			if (refString.Find(_T("alert(\'投票"))>0)
			{
				szReturn=_T("return");
			}

	return szReturn;
}
/*
CString CmyieView::GetAnswer(void)
{
	CString    refString ;
	CComPtr<IDispatch>   spDisp   =   GetHtmlDocument();  
	if ( spDisp ) 
	{ 
		HGLOBAL   hMemory = GlobalAlloc(GMEM_MOVEABLE, 0); 
		if( NULL != hMemory ) 
		{ 
			CComQIPtr<IPersistStreamInit>   spPersistStream   =   spDisp; 
			if( spPersistStream ) 
			{ 
				CComPtr <IStream>   spStream; 
				if(SUCCEEDED(CreateStreamOnHGlobal(hMemory,   TRUE,   &spStream))) 
				{ 
					spPersistStream-> Save(spStream,   FALSE);      
					LPCTSTR   pstr   =   (LPCTSTR)   GlobalLock(hMemory); 
					if( pstr ) 
					{                       
						refString   =   pstr; 
						GlobalUnlock(hMemory); 
					} 
					::GlobalFree(hMemory);
				} 
			} 
		} 
	}
	CString szReturn=_T("");
	POSITION  hPos = NULL;
	CQaNode * pNode= NULL;

	for( hPos = m_listQA.GetHeadPosition();
		hPos != NULL; )
	{
		pNode = (CQaNode*) m_listQA.GetNext( hPos );
		if( pNode == NULL )
			break;
		if (refString.Find(pNode->m_strQ)>0)
		{
			szReturn=pNode->m_strA;
			break;
		}
		else
		{
			if (refString.Find(_T("window.opener.vt630"))>0)
			{
				szReturn=_T("return");
			}
		}

	}
	return szReturn;
}//*/
BOOL CmyieView::GetQAList(void)
{
	CString szResult = QaHttpPost(
		_T("www.21cnjy.com"), _T(""),
		_T("server/getQAXml.asp") );
	CXml	hXml;
	try{
		if( !hXml.LoadXml( szResult ) ) {
			MessageBox( _T("读取资料失败,请稍后再试。"),
				_T("提示"), MB_OK|MB_ICONASTERISK );
			return FALSE;
		}
	}
	catch(...)
	{
		int nResult=MessageBox(_T("系统出错,您必须下载微软的补丁才可以运行本软件,现在下载补丁吗?"),_T("升级提示"),MB_YESNO | MB_ICONQUESTION);
		if(nResult==6)
		{
			ShellExecute( NULL, NULL,
				_T("http://download.microsoft.com/download/8/e/2/8e203b97-46a9-4863-93c5-d69044962f06/msxml6_x86.msi"),
				NULL, NULL, SW_MAXIMIZE );
		}
		return FALSE;
	}


	CXmlNodes	nodes = hXml.SelectNodes( _T("//qa") );
	for( int i = 0; i < nodes.GetCount(); i++ )
	{
		CQaNode * pNode = new CQaNode();

		if( !pNode->ParseFromXmlNode( nodes[i] ) )
		{
			delete pNode;
			pNode = NULL;
			continue;
		}
		m_listQA.AddTail(pNode);
//		m_QAList.AddTail(pNode);
	}
	hXml.Close();
	return TRUE;
    }

CString CmyieView::GetIP(void)
{
	CString szResult = QaHttpPost(
		_T("www.21cnjy.com"), _T(""),
		_T("server/getip.asp") );
	//if (szResult.GetLength()>10 && szResult.GetLength()<16)
	{
		return szResult;
	}
	//else
	{
	//	return _T("");
	}
}

void CmyieView::OnDocumentComplete(LPCTSTR lpszURL)
{
	// TODO: 在此添加专用代码和/或调用基类
	if (GetAnswer()==_T("return"))
	{
		CString szUrl;
		szUrl.Format(_T("http://www.scient.com.cn/vote.asp?id=%ld"),m_nUserID);
		Navigate(szUrl,NULL,NULL);
		return;
	}
    nIsready=1;
	CHtmlView::OnDocumentComplete(lpszURL);
}

void CmyieView::OnStart()
{
	SetTimer(0,m_nSec,NULL);
// TODO: 在此添加命令处理程序代码
}

void CmyieView::OnConfig()
{
	CConfig figDlg;
	if (figDlg.DoModal()==IDOK)
	{
		m_nSec=figDlg.m_nSec;
		m_nUserID=figDlg.m_nUserID;
	}
	// TODO: 在此添加命令处理程序代码
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -