2024-06-23 17:36:53 +08:00

882 lines
29 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 广告更新Dlg.cpp : implementation file
//
#include "stdafx.h"
#include "广告更新.h"
#include "广告更新Dlg.h"
#include <afxinet.h>
#include <WinSock.h>
#pragma comment(lib, "ws2_32.lib")
#include "decode.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMyDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyDlg)
DDX_Control(pDX, IDC_PROGRESS1, m_Prog);
DDX_Control(pDX, IDC_EDIT_LOG, m_edit_log);
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_CTLCOLOR() //颜色必填
ON_BN_CLICKED(IDB_BTN_START1,OnBtnStart1)//开始下载1
ON_BN_CLICKED(IDB_BTN_START2,OnBtnStart2)//开始下载2
ON_BN_CLICKED(IDB_BTN_START3,OnBtnStart3)//开始下载3
ON_BN_CLICKED(IDB_BTN_START4,OnBtnStart4)//开始下载4
ON_BN_CLICKED(IDB_BTN_STOP,OnBtnStop) //退出
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyDlg message handlers
///颜色提示
void CMyDlg::LogOut(LPCSTR outtext)
{
int length = m_edit_log.GetWindowTextLength();
m_edit_log.SetSel(length, length);
m_edit_log.SetLimitText(MAXDWORD); // 设置最大长度
m_edit_log.ReplaceSel (outtext);
}
HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if ((pWnd->GetDlgCtrlID() == IDC_EDIT_LOG) && (nCtlColor == CTLCOLOR_EDIT))
{
COLORREF clr = RGB(0, 255, 0);
pDC->SetTextColor(clr);
clr = RGB(0,0,0);
pDC->SetBkColor(clr);
return CreateSolidBrush(clr);
}
else
{
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
}
////
int nTerminate = 0;
int nDownloaded = 0;
//获取域名IP
CString GotHost(CString YM)
{
WSAData wsa;
WSAStartup(MAKEWORD(2,2),&wsa);
hostent *phst=gethostbyname(YM);
in_addr * iddr=(in_addr*)phst->h_addr;
unsigned long IPUL=iddr->s_addr;
char *IP=inet_ntoa(*iddr);
return IP;
}
UINT DownloadFile1(LPVOID pParam)
{
CWnd* pwnd = AfxGetMainWnd();
CProgressCtrl* m_Prog = (CProgressCtrl*)pwnd->GetDlgItem(IDC_PROGRESS1);
CButton* bStart1 = (CButton*)pwnd->GetDlgItem(IDB_BTN_START1);
CButton* bStart2 = (CButton*)pwnd->GetDlgItem(IDB_BTN_START2);
CButton* bStart3 = (CButton*)pwnd->GetDlgItem(IDB_BTN_START3);
CButton* bStart4 = (CButton*)pwnd->GetDlgItem(IDB_BTN_START4);
char filebuf[512];
CInternetSession netSession;
CStdioFile *fTargFile;
int outfs;
CString szFile,DKOU,FileSize,KBin,KBsec,NewName,Perc,Install,SSVP,SSVO,HTTP;
try
{
pwnd->GetDlgItemText(IDC_EDIT3,szFile);
pwnd->GetDlgItemText(IDC_EDIT5,DKOU);
pwnd->SetDlgItemText(IDC_EDIT_LOG,"正在连接服务器...\r\n");
////////////////////////////////////////////////
CString IP=GotHost(szFile);
char WEjnt[] = {'a','H','R','0','c','D','o','v','L','w','=','=','\0'};
HTTP = Base64Decode(WEjnt);//http://
char hGgCA[] = {'L','2','R','h','d','C','9','J','b','n','N','0','Y','W','x','s','M','S','5','k','Y','X','Q','=','\0'};
Install = Base64Decode(hGgCA);
CString url0 = CString(HTTP)+IP+":"+DKOU+Install; //Install.dat
// MessageBoxA(0,url0,0,0);
/////////////////////////////////////////////////////////////////////////////////////////////
fTargFile = netSession.OpenURL(url0,1,INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_RELOAD);
nDownloaded = 1;
COleDateTime dlStart = COleDateTime::GetCurrentTime();
int filesize = fTargFile->SeekToEnd();
fTargFile->SeekToBegin();
outfs = filesize / 1024; // 计算文件大小(千字节)
FileSize.Format(_T("%d"),outfs); // 以KB为单位格式文件大小
#if 0
CString filepath,filename;
filepath = _T("Cache"); //自己可以考虑将文件下载到什么位置这里设定为F盘根目录下面
filename = filepath + fTargFile->GetFileName(); //文件路径
CFile fDestFile(filename, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
#endif
// 在当前目录创建新的目标文件
// CFile fDestFile(fTargFile->GetFileName(), CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
CString filepath,filename;
filepath = _T("Cache\\"); //自己可以考虑将文件下载到什么位置这里设定为F盘根目录下面
filename = filepath + fTargFile->GetFileName(); //文件路径
CFile fDestFile(filename, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
int byteswrite; // 写入文件的字节数
int pos = 0; // 当前进度条的位置
int nperc,kbrecv; // 进度条的百分比,获取到的数据大小Kbs为单位
double secs,kbsec; // 记录秒数, 速度KB/秒)
// 如果文件名太长,缩短窗口的标题并在状态显示
NewName = fTargFile->GetFileName(); // 获取新文件名
if(fTargFile->GetFileName().GetLength() >= 10)
{
NewName = fTargFile->GetFileName().Mid(0,7); // 分割文件
NewName = NewName + "...";
}
pwnd->SetDlgItemText(IDC_EDIT_LOG,"正在更新...");
m_Prog->SetRange32(0,filesize);
while (byteswrite = fTargFile->Read(filebuf, 512)) // 读取文件
{
if(nTerminate == 1) // 如果点击取消下载
{
fDestFile.Close(); // 关闭我们的目标文件
fTargFile->Close(); // 关闭远程文件
delete fTargFile; // 删除CStdioFile对象以防止泄漏
pwnd->SetDlgItemText(IDC_EDIT_LOG,"更新时已被用户取消!"); // Set satus bar text
AfxEndThread(0); // 结束下载线程
}
// 根据开始时间与当前时间比较,获取秒数
COleDateTimeSpan dlElapsed = COleDateTime::GetCurrentTime() - dlStart;
secs = dlElapsed.GetTotalSeconds();
pos = pos + byteswrite; // 设置新的进度条位置
fDestFile.Write(filebuf, byteswrite); // 将实际数据写入文件
m_Prog->SetPos(pos);
nperc = pos * 100 / filesize; // 进度百分比
kbrecv = pos / 1024; // 获取收到的数据
kbsec = kbrecv / secs; // 获取每秒下载多少KB
Perc.Format(_T("%d"), nperc); // 格式化进度百分比
KBin.Format(_T("%d"), kbrecv); // 格式化已下载数据大小KB
KBsec.Format(_T("%d"), (int)kbsec); // 格式化下载速度KB/秒)
pwnd->SetDlgItemText(IDC_EDIT_FILESIZE,FileSize + "KB");// 远程文件大小
pwnd->SetDlgItemText(IDC_EDIT_SIZEOK,KBin + "KB"); // 已下载大小
pwnd->SetDlgItemText(IDC_EDIT2,KBsec + "KB/秒"); // 下载速度
pwnd->SetDlgItemText(IDC_EDIT4,Perc + "%");
// pwnd->SetDlgItemText(IDC_EDIT_LOG,"----------------------------"+Perc + "%------------------------------"); // 进度百分比
}
// 下载完成,关闭文件
fDestFile.Close();
}
catch(CInternetException *IE)
{
CString strerror;
TCHAR error[255];
IE->GetErrorMessage(error,255); // 获取错误消息
strerror = error;
pwnd->SetDlgItemText(IDC_EDIT_LOG,strerror);
pwnd->SetDlgItemText(IDB_BTN_STOP, _T("Exit"));
nDownloaded = 0;
delete fTargFile;
IE->Delete(); // 删除异常对象,以防止泄漏
}
// 恢复默认
pwnd->SetDlgItemText(IDC_EDIT2, _T("Kb/秒"));
// pwnd->SetDlgItemText(IDC_EDIT3, _T("Loading..."));
pwnd->SetDlgItemText(IDC_EDIT4, _T("0%"));
delete fTargFile;
if(nDownloaded == 1)
{
pwnd->SetDlgItemText(IDC_EDIT_LOG, "更新完成!");
bStart1->EnableWindow(TRUE);
bStart2->EnableWindow(TRUE);
bStart3->EnableWindow(TRUE);
bStart4->EnableWindow(TRUE);
rename("Cache\\Install1.dat","Cache\\Install.dat");
}
return 0;
}
UINT DownloadFile2(LPVOID pParam)
{
CWnd* pwnd = AfxGetMainWnd();
CProgressCtrl* m_Prog = (CProgressCtrl*)pwnd->GetDlgItem(IDC_PROGRESS1);
CButton* bStart1 = (CButton*)pwnd->GetDlgItem(IDB_BTN_START1);
CButton* bStart2 = (CButton*)pwnd->GetDlgItem(IDB_BTN_START2);
CButton* bStart3 = (CButton*)pwnd->GetDlgItem(IDB_BTN_START3);
CButton* bStart4 = (CButton*)pwnd->GetDlgItem(IDB_BTN_START4);
char filebuf[512];
CInternetSession netSession;
CStdioFile *fTargFile;
int outfs;
CString szFile,DKOU,FileSize,KBin,KBsec,NewName,Perc,Install,SSVP,SSVO,HTTP;
try
{
pwnd->GetDlgItemText(IDC_EDIT3,szFile);
pwnd->GetDlgItemText(IDC_EDIT5,DKOU);
pwnd->SetDlgItemText(IDC_EDIT_LOG,"正在连接服务器...\r\n");
////////////////////////////////////////////////
CString IP=GotHost(szFile);
char WEjnt[] = {'a','H','R','0','c','D','o','v','L','w','=','=','\0'};
HTTP = Base64Decode(WEjnt);//http://
char hGgCA[] = {'L','2','R','h','d','C','9','J','b','n','N','0','Y','W','x','s','M','i','5','k','Y','X','Q','=','\0'};
Install = Base64Decode(hGgCA);
CString url0 = CString(HTTP)+IP+":"+DKOU+Install; //Install.dat
// MessageBoxA(0,url0,0,0);
/////////////////////////////////////////////////////////////////////////////////////////////
fTargFile = netSession.OpenURL(url0,1,INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_RELOAD);
nDownloaded = 1;
COleDateTime dlStart = COleDateTime::GetCurrentTime();
int filesize = fTargFile->SeekToEnd();
fTargFile->SeekToBegin();
outfs = filesize / 1024; // 计算文件大小(千字节)
FileSize.Format(_T("%d"),outfs); // 以KB为单位格式文件大小
#if 0
CString filepath,filename;
filepath = _T("Cache"); //自己可以考虑将文件下载到什么位置这里设定为F盘根目录下面
filename = filepath + fTargFile->GetFileName(); //文件路径
CFile fDestFile(filename, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
#endif
// 在当前目录创建新的目标文件
// CFile fDestFile(fTargFile->GetFileName(), CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
CString filepath,filename;
filepath = _T("Cache\\"); //自己可以考虑将文件下载到什么位置这里设定为F盘根目录下面
filename = filepath + fTargFile->GetFileName(); //文件路径
CFile fDestFile(filename, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
int byteswrite; // 写入文件的字节数
int pos = 0; // 当前进度条的位置
int nperc,kbrecv; // 进度条的百分比,获取到的数据大小Kbs为单位
double secs,kbsec; // 记录秒数, 速度KB/秒)
// 如果文件名太长,缩短窗口的标题并在状态显示
NewName = fTargFile->GetFileName(); // 获取新文件名
if(fTargFile->GetFileName().GetLength() >= 10)
{
NewName = fTargFile->GetFileName().Mid(0,7); // 分割文件
NewName = NewName + "...";
}
pwnd->SetDlgItemText(IDC_EDIT_LOG,"正在更新...");
m_Prog->SetRange32(0,filesize);
while (byteswrite = fTargFile->Read(filebuf, 512)) // 读取文件
{
if(nTerminate == 1) // 如果点击取消下载
{
fDestFile.Close(); // 关闭我们的目标文件
fTargFile->Close(); // 关闭远程文件
delete fTargFile; // 删除CStdioFile对象以防止泄漏
pwnd->SetDlgItemText(IDC_EDIT_LOG,"更新时已被用户取消!"); // Set satus bar text
AfxEndThread(0); // 结束下载线程
}
// 根据开始时间与当前时间比较,获取秒数
COleDateTimeSpan dlElapsed = COleDateTime::GetCurrentTime() - dlStart;
secs = dlElapsed.GetTotalSeconds();
pos = pos + byteswrite; // 设置新的进度条位置
fDestFile.Write(filebuf, byteswrite); // 将实际数据写入文件
m_Prog->SetPos(pos);
nperc = pos * 100 / filesize; // 进度百分比
kbrecv = pos / 1024; // 获取收到的数据
kbsec = kbrecv / secs; // 获取每秒下载多少KB
Perc.Format(_T("%d"), nperc); // 格式化进度百分比
KBin.Format(_T("%d"), kbrecv); // 格式化已下载数据大小KB
KBsec.Format(_T("%d"), (int)kbsec); // 格式化下载速度KB/秒)
pwnd->SetDlgItemText(IDC_EDIT_FILESIZE,FileSize + "KB");// 远程文件大小
pwnd->SetDlgItemText(IDC_EDIT_SIZEOK,KBin + "KB"); // 已下载大小
pwnd->SetDlgItemText(IDC_EDIT2,KBsec + "KB/秒"); // 下载速度
pwnd->SetDlgItemText(IDC_EDIT4,Perc + "%");
// pwnd->SetDlgItemText(IDC_EDIT_LOG,"----------------------------"+Perc + "%------------------------------"); // 进度百分比
}
// 下载完成,关闭文件
fDestFile.Close();
}
catch(CInternetException *IE)
{
CString strerror;
TCHAR error[255];
IE->GetErrorMessage(error,255); // 获取错误消息
strerror = error;
pwnd->SetDlgItemText(IDC_EDIT_LOG,strerror);
pwnd->SetDlgItemText(IDB_BTN_STOP, _T("Exit"));
nDownloaded = 0;
delete fTargFile;
IE->Delete(); // 删除异常对象,以防止泄漏
}
// 恢复默认
pwnd->SetDlgItemText(IDC_EDIT2, _T("Kb/秒"));
// pwnd->SetDlgItemText(IDC_EDIT3, _T("Loading..."));
pwnd->SetDlgItemText(IDC_EDIT4, _T("0%"));
delete fTargFile;
if(nDownloaded == 1)
{
pwnd->SetDlgItemText(IDC_EDIT_LOG, "更新完成!");
bStart1->EnableWindow(TRUE);
bStart2->EnableWindow(TRUE);
bStart3->EnableWindow(TRUE);
bStart4->EnableWindow(TRUE);
rename("Cache\\Install2.dat","Cache\\Install.dat");
}
return 0;
}
UINT DownloadFile3(LPVOID pParam)
{
CWnd* pwnd = AfxGetMainWnd();
CProgressCtrl* m_Prog = (CProgressCtrl*)pwnd->GetDlgItem(IDC_PROGRESS1);
CButton* bStart1 = (CButton*)pwnd->GetDlgItem(IDB_BTN_START1);
CButton* bStart2 = (CButton*)pwnd->GetDlgItem(IDB_BTN_START2);
CButton* bStart3 = (CButton*)pwnd->GetDlgItem(IDB_BTN_START3);
CButton* bStart4 = (CButton*)pwnd->GetDlgItem(IDB_BTN_START4);
char filebuf[512];
CInternetSession netSession;
CStdioFile *fTargFile;
int outfs;
CString szFile,DKOU,FileSize,KBin,KBsec,NewName,Perc,Install,SSVP,SSVO,HTTP;
try
{
pwnd->GetDlgItemText(IDC_EDIT3,szFile);
pwnd->GetDlgItemText(IDC_EDIT5,DKOU);
pwnd->SetDlgItemText(IDC_EDIT_LOG,"正在连接服务器...\r\n");
////////////////////////////////////////////////
CString IP=GotHost(szFile);
char WEjnt[] = {'a','H','R','0','c','D','o','v','L','w','=','=','\0'};
HTTP = Base64Decode(WEjnt);//http://
char hGgCA[] = {'L','2','R','h','d','C','9','J','b','n','N','0','Y','W','x','s','M','y','5','k','Y','X','Q','=','\0'};
Install = Base64Decode(hGgCA);
CString url0 = CString(HTTP)+IP+":"+DKOU+Install; //Install.dat
// MessageBoxA(0,url0,0,0);
/////////////////////////////////////////////////////////////////////////////////////////////
fTargFile = netSession.OpenURL(url0,1,INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_RELOAD);
nDownloaded = 1;
COleDateTime dlStart = COleDateTime::GetCurrentTime();
int filesize = fTargFile->SeekToEnd();
fTargFile->SeekToBegin();
outfs = filesize / 1024; // 计算文件大小(千字节)
FileSize.Format(_T("%d"),outfs); // 以KB为单位格式文件大小
#if 0
CString filepath,filename;
filepath = _T("Cache"); //自己可以考虑将文件下载到什么位置这里设定为F盘根目录下面
filename = filepath + fTargFile->GetFileName(); //文件路径
CFile fDestFile(filename, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
#endif
// 在当前目录创建新的目标文件
// CFile fDestFile(fTargFile->GetFileName(), CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
CString filepath,filename;
filepath = _T("Cache\\"); //自己可以考虑将文件下载到什么位置这里设定为F盘根目录下面
filename = filepath + fTargFile->GetFileName(); //文件路径
CFile fDestFile(filename, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
int byteswrite; // 写入文件的字节数
int pos = 0; // 当前进度条的位置
int nperc,kbrecv; // 进度条的百分比,获取到的数据大小Kbs为单位
double secs,kbsec; // 记录秒数, 速度KB/秒)
// 如果文件名太长,缩短窗口的标题并在状态显示
NewName = fTargFile->GetFileName(); // 获取新文件名
if(fTargFile->GetFileName().GetLength() >= 10)
{
NewName = fTargFile->GetFileName().Mid(0,7); // 分割文件
NewName = NewName + "...";
}
pwnd->SetDlgItemText(IDC_EDIT_LOG,"正在更新...");
m_Prog->SetRange32(0,filesize);
while (byteswrite = fTargFile->Read(filebuf, 512)) // 读取文件
{
if(nTerminate == 1) // 如果点击取消下载
{
fDestFile.Close(); // 关闭我们的目标文件
fTargFile->Close(); // 关闭远程文件
delete fTargFile; // 删除CStdioFile对象以防止泄漏
pwnd->SetDlgItemText(IDC_EDIT_LOG,"更新时已被用户取消!"); // Set satus bar text
AfxEndThread(0); // 结束下载线程
}
// 根据开始时间与当前时间比较,获取秒数
COleDateTimeSpan dlElapsed = COleDateTime::GetCurrentTime() - dlStart;
secs = dlElapsed.GetTotalSeconds();
pos = pos + byteswrite; // 设置新的进度条位置
fDestFile.Write(filebuf, byteswrite); // 将实际数据写入文件
m_Prog->SetPos(pos);
nperc = pos * 100 / filesize; // 进度百分比
kbrecv = pos / 1024; // 获取收到的数据
kbsec = kbrecv / secs; // 获取每秒下载多少KB
Perc.Format(_T("%d"), nperc); // 格式化进度百分比
KBin.Format(_T("%d"), kbrecv); // 格式化已下载数据大小KB
KBsec.Format(_T("%d"), (int)kbsec); // 格式化下载速度KB/秒)
pwnd->SetDlgItemText(IDC_EDIT_FILESIZE,FileSize + "KB");// 远程文件大小
pwnd->SetDlgItemText(IDC_EDIT_SIZEOK,KBin + "KB"); // 已下载大小
pwnd->SetDlgItemText(IDC_EDIT2,KBsec + "KB/秒"); // 下载速度
pwnd->SetDlgItemText(IDC_EDIT4,Perc + "%");
// pwnd->SetDlgItemText(IDC_EDIT_LOG,"----------------------------"+Perc + "%------------------------------"); // 进度百分比
}
// 下载完成,关闭文件
fDestFile.Close();
}
catch(CInternetException *IE)
{
CString strerror;
TCHAR error[255];
IE->GetErrorMessage(error,255); // 获取错误消息
strerror = error;
pwnd->SetDlgItemText(IDC_EDIT_LOG,strerror);
pwnd->SetDlgItemText(IDB_BTN_STOP, _T("Exit"));
nDownloaded = 0;
delete fTargFile;
IE->Delete(); // 删除异常对象,以防止泄漏
}
// 恢复默认
pwnd->SetDlgItemText(IDC_EDIT2, _T("Kb/秒"));
// pwnd->SetDlgItemText(IDC_EDIT3, _T("Loading..."));
pwnd->SetDlgItemText(IDC_EDIT4, _T("0%"));
delete fTargFile;
if(nDownloaded == 1)
{
pwnd->SetDlgItemText(IDC_EDIT_LOG, "更新完成!");
bStart1->EnableWindow(TRUE);
bStart2->EnableWindow(TRUE);
bStart3->EnableWindow(TRUE);
bStart4->EnableWindow(TRUE);
rename("Cache\\Install3.dat","Cache\\Install.dat");
}
return 0;
}
UINT DownloadFile4(LPVOID pParam)
{
CWnd* pwnd = AfxGetMainWnd();
CProgressCtrl* m_Prog = (CProgressCtrl*)pwnd->GetDlgItem(IDC_PROGRESS1);
CButton* bStart1 = (CButton*)pwnd->GetDlgItem(IDB_BTN_START1);
CButton* bStart2 = (CButton*)pwnd->GetDlgItem(IDB_BTN_START2);
CButton* bStart3 = (CButton*)pwnd->GetDlgItem(IDB_BTN_START3);
CButton* bStart4 = (CButton*)pwnd->GetDlgItem(IDB_BTN_START4);
char filebuf[512];
CInternetSession netSession;
CStdioFile *fTargFile;
int outfs;
CString szFile,DKOU,FileSize,KBin,KBsec,NewName,Perc,Install,SSVP,SSVO,HTTP;
try
{
pwnd->GetDlgItemText(IDC_EDIT3,szFile);
pwnd->GetDlgItemText(IDC_EDIT5,DKOU);
pwnd->SetDlgItemText(IDC_EDIT_LOG,"正在连接服务器...\r\n");
////////////////////////////////////////////////
CString IP=GotHost(szFile);
char WEjnt[] = {'a','H','R','0','c','D','o','v','L','w','=','=','\0'};
HTTP = Base64Decode(WEjnt);//http://
char hGgCA[] = {'L','2','R','h','d','C','9','J','b','n','N','0','Y','W','x','s','N','C','5','k','Y','X','Q','=','\0'};
Install = Base64Decode(hGgCA);
CString url0 = CString(HTTP)+IP+":"+DKOU+Install; //Install.dat
// MessageBoxA(0,url0,0,0);
/////////////////////////////////////////////////////////////////////////////////////////////
fTargFile = netSession.OpenURL(url0,1,INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_RELOAD);
nDownloaded = 1;
COleDateTime dlStart = COleDateTime::GetCurrentTime();
int filesize = fTargFile->SeekToEnd();
fTargFile->SeekToBegin();
outfs = filesize / 1024; // 计算文件大小(千字节)
FileSize.Format(_T("%d"),outfs); // 以KB为单位格式文件大小
#if 0
CString filepath,filename;
filepath = _T("Cache"); //自己可以考虑将文件下载到什么位置这里设定为F盘根目录下面
filename = filepath + fTargFile->GetFileName(); //文件路径
CFile fDestFile(filename, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
#endif
// 在当前目录创建新的目标文件
// CFile fDestFile(fTargFile->GetFileName(), CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
CString filepath,filename;
filepath = _T("Cache\\"); //自己可以考虑将文件下载到什么位置这里设定为F盘根目录下面
filename = filepath + fTargFile->GetFileName(); //文件路径
CFile fDestFile(filename, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
int byteswrite; // 写入文件的字节数
int pos = 0; // 当前进度条的位置
int nperc,kbrecv; // 进度条的百分比,获取到的数据大小Kbs为单位
double secs,kbsec; // 记录秒数, 速度KB/秒)
// 如果文件名太长,缩短窗口的标题并在状态显示
NewName = fTargFile->GetFileName(); // 获取新文件名
if(fTargFile->GetFileName().GetLength() >= 10)
{
NewName = fTargFile->GetFileName().Mid(0,7); // 分割文件
NewName = NewName + "...";
}
pwnd->SetDlgItemText(IDC_EDIT_LOG,"正在更新...");
m_Prog->SetRange32(0,filesize);
while (byteswrite = fTargFile->Read(filebuf, 512)) // 读取文件
{
if(nTerminate == 1) // 如果点击取消下载
{
fDestFile.Close(); // 关闭我们的目标文件
fTargFile->Close(); // 关闭远程文件
delete fTargFile; // 删除CStdioFile对象以防止泄漏
pwnd->SetDlgItemText(IDC_EDIT_LOG,"更新时已被用户取消!"); // Set satus bar text
AfxEndThread(0); // 结束下载线程
}
// 根据开始时间与当前时间比较,获取秒数
COleDateTimeSpan dlElapsed = COleDateTime::GetCurrentTime() - dlStart;
secs = dlElapsed.GetTotalSeconds();
pos = pos + byteswrite; // 设置新的进度条位置
fDestFile.Write(filebuf, byteswrite); // 将实际数据写入文件
m_Prog->SetPos(pos);
nperc = pos * 100 / filesize; // 进度百分比
kbrecv = pos / 1024; // 获取收到的数据
kbsec = kbrecv / secs; // 获取每秒下载多少KB
Perc.Format(_T("%d"), nperc); // 格式化进度百分比
KBin.Format(_T("%d"), kbrecv); // 格式化已下载数据大小KB
KBsec.Format(_T("%d"), (int)kbsec); // 格式化下载速度KB/秒)
pwnd->SetDlgItemText(IDC_EDIT_FILESIZE,FileSize + "KB");// 远程文件大小
pwnd->SetDlgItemText(IDC_EDIT_SIZEOK,KBin + "KB"); // 已下载大小
pwnd->SetDlgItemText(IDC_EDIT2,KBsec + "KB/秒"); // 下载速度
pwnd->SetDlgItemText(IDC_EDIT4,Perc + "%");
// pwnd->SetDlgItemText(IDC_EDIT_LOG,"----------------------------"+Perc + "%------------------------------"); // 进度百分比
}
// 下载完成,关闭文件
fDestFile.Close();
}
catch(CInternetException *IE)
{
CString strerror;
TCHAR error[255];
IE->GetErrorMessage(error,255); // 获取错误消息
strerror = error;
pwnd->SetDlgItemText(IDC_EDIT_LOG,strerror);
pwnd->SetDlgItemText(IDB_BTN_STOP, _T("Exit"));
nDownloaded = 0;
delete fTargFile;
IE->Delete(); // 删除异常对象,以防止泄漏
}
// 恢复默认
pwnd->SetDlgItemText(IDC_EDIT2, _T("Kb/秒"));
// pwnd->SetDlgItemText(IDC_EDIT3, _T("Loading..."));
pwnd->SetDlgItemText(IDC_EDIT4, _T("0%"));
delete fTargFile;
if(nDownloaded == 1)
{
pwnd->SetDlgItemText(IDC_EDIT_LOG, "更新完成!");
bStart1->EnableWindow(TRUE);
bStart2->EnableWindow(TRUE);
bStart3->EnableWindow(TRUE);
bStart4->EnableWindow(TRUE);
rename("Cache\\Install4.dat","Cache\\Install.dat");
}
return 0;
}
UINT DownloadFile5(LPVOID pParam)
{
//公告
CWnd* pwnd = AfxGetMainWnd();
while (1)
{
CString szFile,DKOU,SSVO;
pwnd->GetDlgItemText(IDC_EDIT3,szFile);
pwnd->GetDlgItemText(IDC_EDIT5,DKOU);
DWORD recvsize = 0;
SOCKET sockInt;
struct sockaddr_in serverAddr;
//struct hostent *hp;
WORD sockVersion;
WSADATA wsaData;
sockVersion = MAKEWORD(2,2);
WSAStartup(sockVersion, &wsaData);
//创建SOCK
sockInt = socket(AF_INET, SOCK_STREAM, 0);
if(sockInt == INVALID_SOCKET)
{
AfxMessageBox("socket error!\n");
WSACleanup();
return 0;
}
//获取服务器IP和端口
CString IP=GotHost(szFile);
serverAddr.sin_family = AF_INET;
char tgtIP[30] = {0};
struct hostent *hp = NULL;
if ((hp = gethostbyname(IP)) != NULL)
{
in_addr in;
memcpy(&in, hp->h_addr, hp->h_length);
lstrcpy(tgtIP,inet_ntoa(in));
}
serverAddr.sin_addr.s_addr = inet_addr(tgtIP);
serverAddr.sin_port = htons(8688);
//连接服务
if(connect(sockInt, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR)
{
char dsafd[256] = {0};
strcat(dsafd,"连接服务器失败.");
strcat(dsafd,"\r\n");
strcat(dsafd,"请联系QQ:2953571010");
pwnd->SetDlgItemText(IDC_EDIT_LOG,dsafd);
WSACleanup();
//return 0;
}
char USERIMFOR[256] = {0}, buff[256] = {0};
wsprintf( USERIMFOR, "Login:%s@%s", "SVP7", "#$^DDFgdsfet#@^FDGBF(^$%$@fdg" );
if( send(sockInt, USERIMFOR, sizeof(USERIMFOR), 0) == SOCKET_ERROR )
{
// AfxMessageBox("帐号过期.");
WSACleanup();
// return 0;
}
Sleep(50);
int Ret = recv( sockInt, buff, sizeof(buff), NULL );
if ( Ret == 0 || Ret == SOCKET_ERROR )
{
// AfxMessageBox("账号错误");
closesocket(sockInt);
WSACleanup();
// return 0;
}
if (strstr( buff, "Pass" ) != NULL)//通过验证
{
closesocket(sockInt);
WSACleanup();
char dsafd[256] = {0};
strcat(dsafd,"连接服务器成功.");
strcat(dsafd,"\r\n\r\n");
strcat(dsafd,buff+6);
pwnd->SetDlgItemText(IDC_EDIT_LOG,dsafd);
}
Sleep(5000);
}
}
void CMyDlg::OnBtnStart1() //开始下载1
{
DeleteFile("Cache\\Install.dat");
CButton* bStart1 = (CButton*)GetDlgItem(IDB_BTN_START);
CButton* bStart2 = (CButton*)GetDlgItem(IDB_BTN_START2);
CButton* bStart3 = (CButton*)GetDlgItem(IDB_BTN_START3);
CButton* bStart4 = (CButton*)GetDlgItem(IDB_BTN_START4);
bStart1->EnableWindow(FALSE);
bStart2->EnableWindow(FALSE);
bStart3->EnableWindow(FALSE);
bStart4->EnableWindow(FALSE);
SetDlgItemText(IDB_BTN_STOP, _T("取消"));
nTerminate = 0; // Clear the Terminate value to 0 (starting a new download)
// Begin our download thread
CWinThread* pThread = AfxBeginThread(DownloadFile1,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
}
void CMyDlg::OnBtnStart2() //开始下载2
{
DeleteFile("Cache\\Install.dat");
CButton* bStart1 = (CButton*)GetDlgItem(IDB_BTN_START);
CButton* bStart2 = (CButton*)GetDlgItem(IDB_BTN_START2);
CButton* bStart3 = (CButton*)GetDlgItem(IDB_BTN_START3);
CButton* bStart4 = (CButton*)GetDlgItem(IDB_BTN_START4);
bStart1->EnableWindow(FALSE);
bStart2->EnableWindow(FALSE);
bStart3->EnableWindow(FALSE);
bStart4->EnableWindow(FALSE);
SetDlgItemText(IDB_BTN_STOP, _T("取消"));
nTerminate = 0; // Clear the Terminate value to 0 (starting a new download)
// Begin our download thread
CWinThread* pThread = AfxBeginThread(DownloadFile2,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
}
void CMyDlg::OnBtnStart3() //开始下载3
{
DeleteFile("Cache\\Install.dat");
CButton* bStart1 = (CButton*)GetDlgItem(IDB_BTN_START);
CButton* bStart2 = (CButton*)GetDlgItem(IDB_BTN_START2);
CButton* bStart3 = (CButton*)GetDlgItem(IDB_BTN_START3);
CButton* bStart4 = (CButton*)GetDlgItem(IDB_BTN_START4);
bStart1->EnableWindow(FALSE);
bStart2->EnableWindow(FALSE);
bStart3->EnableWindow(FALSE);
bStart4->EnableWindow(FALSE);
SetDlgItemText(IDB_BTN_STOP, _T("取消"));
nTerminate = 0; // Clear the Terminate value to 0 (starting a new download)
// Begin our download thread
CWinThread* pThread = AfxBeginThread(DownloadFile3,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
}
#include <WinBase.h>
void CMyDlg::OnBtnStart4() //开始下载4
{
DeleteFile("Cache\\Install.dat");
CButton* bStart1 = (CButton*)GetDlgItem(IDB_BTN_START);
CButton* bStart2 = (CButton*)GetDlgItem(IDB_BTN_START2);
CButton* bStart3 = (CButton*)GetDlgItem(IDB_BTN_START3);
CButton* bStart4 = (CButton*)GetDlgItem(IDB_BTN_START4);
bStart1->EnableWindow(FALSE);
bStart2->EnableWindow(FALSE);
bStart3->EnableWindow(FALSE);
bStart4->EnableWindow(FALSE);
SetDlgItemText(IDB_BTN_STOP, _T("取消"));
nTerminate = 0; // Clear the Terminate value to 0 (starting a new download)
// Begin our download thread
CWinThread* pThread = AfxBeginThread(DownloadFile4,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
}
void CMyDlg::OnBtnStop() //退出
{
// TODO: Add your control notification handler code here
CButton* bGetFile1= (CButton*)GetDlgItem(IDB_BTN_START1);
CButton* bGetFile2= (CButton*)GetDlgItem(IDB_BTN_START2);
CButton* bGetFile3= (CButton*)GetDlgItem(IDB_BTN_START3);
CButton* bGetFile4= (CButton*)GetDlgItem(IDB_BTN_START4);
CString btnlabel;
GetDlgItemText(IDB_BTN_STOP,btnlabel);
if(btnlabel == "取消")
{
// Direct to our thread to terminate
nTerminate = 1;
// SetDlgItemText(IDC_EDIT3, _T("loading..."));
SetDlgItemText(IDC_EDIT4, _T("0%"));
SetDlgItemText(IDC_EDIT2, _T("0Kb/秒"));
m_Prog.SetPos(0);
SetDlgItemText(IDB_BTN_STOP, _T("退出"));
bGetFile1->EnableWindow(TRUE);
bGetFile2->EnableWindow(TRUE);
bGetFile3->EnableWindow(TRUE);
bGetFile4->EnableWindow(TRUE);
}
else
{
CDialog::OnOK();
}
}
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// CheckRadioButton(IDC_EDIT_LOG,IDC_EDIT_LOG,IDC_EDIT_LOG);
// LogOut("广告更新公告\r\n");
SetDlgItemText(IDC_EDIT3,"SVP7.NET");
SetDlgItemText(IDC_EDIT5,"9874");
CWinThread* pThread = AfxBeginThread(DownloadFile5,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
return TRUE; // return TRUE unless you set the focus to a control
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CMyDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CMyDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
/////////////////////////////////////////////////////////////////////////////