📄 myieview.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 + -