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

📄 mainfrm.cpp

📁 类似flashget下载工具代码 本来想在完善了上传的
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		proxy->ProxyAddr = Proxyaddr;
		proxy->port = port;
		Delete_Proxy_Record(proxy);
		delete proxy;
		proxy = NULL;
	   m_ie_state = false;
	}
}


//********************************************************************************** 
//** 函数名称: CMainFrame::SetHttpProxy
//** 输    入: CString ip; UINT port
//** 输    出: BOOL 
//** 功能描述: 设置IE代理
//** 作    者: shuyi
//** 创建日期: 2007-7-12
//**************修改记录************************************************************ 
//** 修 改 者: shuyi
//** 修改日期: 2007-7-12
//** 修改描述: 
//** 版    本: V1.0
//********************************************************************************** 
BOOL CMainFrame::SetHttpProxy(CString ip, UINT port) 
{ 

	CString l_just; 
	l_just.Format("http=%s:%d", ip.LockBuffer(), port); 


	//下面的代码将注册表项HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ProxyServer 
	//的内容取出来 
	HKEY hKeyIn = HKEY_CURRENT_USER, hKeyOut; 
	if( ERROR_SUCCESS != RegOpenKeyEx(hKeyIn, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", 0, KEY_CREATE_LINK | KEY_WRITE | KEY_READ | KEY_NOTIFY, &hKeyOut)) 
	{ 
	return FALSE; 
	} 


	ULONG regsize = 0;

	
	if(ERROR_SUCCESS != RegQueryValueEx(hKeyOut, "ProxyServer", NULL, NULL, NULL,&regsize)) 
	{ 
	return FALSE; 
	} 

	LPBYTE pValue = new BYTE[regsize]; 
	memset(pValue, 0x00, regsize); 

	if(ERROR_SUCCESS != RegQueryValueEx(hKeyOut, "ProxyServer", NULL, NULL, pValue, &regsize)) 
	{ 
	return FALSE; 
	} 

	CString oldproxy((char *)pValue); 
	delete [] pValue; 
	pValue = NULL; 

	//从注册表中读出来的数据格式为:http=111.111.111.111:80;ftp=222.222.222.222:21;......, 
	//如果你只想改变http的代理的话, 就只要把其中的111.111.111.111:80换成你想要的代理就行了, 
	//类似的你可以改变其他的代理. 

	//下面的代码就替换http代理成为参数所指定的代理. 
	int pos = 0; 
	//如果没有字符串中没有找到"http="说明用户没有设置http代理,这时候直接加在最前面. 
	if(-1 == (pos = oldproxy.Find("http="))) 
	{ 
	    pos = 0; 
	} 

	int pos1 = 0; 
	if(-1 == (pos1 = oldproxy.Find(";", pos))) 
	{ 
	    pos1 = oldproxy.GetLength(); 
	} 

	oldproxy.Delete(pos, pos1 - pos); 
	oldproxy.Insert(pos, l_just); 

	if(ERROR_SUCCESS != RegSetValueEx(hKeyOut, "ProxyServer", 0, REG_SZ, (const unsigned char *)oldproxy.LockBuffer(), oldproxy.GetLength() + 1)) 
	{ 
	    return FALSE; 
	} 

	RegCloseKey(hKeyOut); 


	//使设置生效 
	if(!InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0)) 
	{ 
	   return FALSE; 
	} 


	   return TRUE; 
} 


void CMainFrame::GetHttpProxy(CString& IP_Proxy,int& port)
{
     unsigned long nSize = 4096; 
 	 //char szBuf[4096] = {0}; 

      INTERNET_PROXY_INFO* pInfo = new INTERNET_PROXY_INFO;
	//INTERNET_PROXY_INFO* pInfo = (INTERNET_PROXY_INFO*)szBuf; 
	if(!InternetQueryOption(NULL, INTERNET_OPTION_PROXY, pInfo, &nSize)) 
	{ 
	    return; //查询IE的代理失败! 
	} 

	CString strTmp (pInfo->lpszProxy);
	//判断是否是http代理
	if(strTmp.Find("http")==-1)
	{
	   return;
	}
	else
	{
		
		if (strTmp.IsEmpty()) return;//无代理设置信息 
		int nStart=0,nPos;
		nPos = strTmp.Find("=");
		strTmp = strTmp.Mid(nPos+1,strTmp.GetLength()-nPos);
		//http=172.17.0.2:8080
		int pos = strTmp.Find(":");
		IP_Proxy = strTmp.Left(pos);
		CString ss = strTmp.Mid(pos+1,strTmp.GetLength()-pos);
		port = (int)atof(ss.GetBuffer(1));
    }
}



//********************************************************************************** 
//** 函数名称: CMainFrame::OnMenuSetProxy
//** 输    入: 
//** 输    出: 
//** 功能描述: 设置代理
//** 作    者: shuyi
//** 创建日期: 2007-7-10
//**************修改记录************************************************************ 
//** 修 改 者: shuyi
//** 修改日期: 2007-7-10
//** 修改描述: 
//** 版    本: V1.0
//********************************************************************************** 
void CMainFrame::OnMenuSetProxy() 
{
     CSetProxyDlg Dlg;
	 Dlg.DoModal();
	
}

void CMainFrame::OnUpdateMenuIdPorxy(CCmdUI* pCmdUI) 
{    
     pCmdUI->SetCheck(m_ie_state);

}


//********************************************************************************** 
//** 函数名称: CMainFrame::DeleteProxy
//** 输    入: CString ProxyName
//** 输    出: 
//** 功能描述: 删除一个代理
//** 作    者: shuyi
//** 创建日期: 2007-7-10
//**************修改记录************************************************************ 
//** 修 改 者: shuyi
//** 修改日期: 2007-7-10
//** 修改描述: 
//** 版    本: V1.0
//********************************************************************************** 
void CMainFrame::DeleteProxy(CString ProxyName)
{    

	 //删除数据库里的纪录
	 //Delete_Proxy_Record();
     LPProxyInfo proxy = NULL;
     int size = m_proxy_list.size();

     vector<LPProxyInfo>::iterator it = m_proxy_list.begin();
	 for(;it!=m_proxy_list.end();it++)
	 {
	     proxy = *it;
         if(proxy->Name==ProxyName)
		 {
		    m_proxy_list.erase(it);
		    break;
		 }
     }
}

//获得配置文件路局
void CMainFrame::GetConfigPath()
{

     
		CString m_sBinPath = _T("");
		TCHAR szFullPath[MAX_PATH];
		TCHAR szDir[MAX_PATH];
		TCHAR szDrive[MAX_PATH];
		GetModuleFileName(NULL,szFullPath,MAX_PATH); 
		_splitpath(szFullPath,szDrive,szDir,NULL,NULL);
		m_sBinPath.Format(_T("%s%s"),szDrive,szDir);
        
        m_config_path = m_sBinPath + "config.ini";
	
        
}
//读配置文件
void CMainFrame::ReadConfig()
{   

	//获得数据库
	TCHAR pathbuf[_MAX_PATH];
	ZeroMemory(pathbuf, _MAX_PATH);	
	//DB数据原
	::GetPrivateProfileString("DBINFO","DBCon","",pathbuf,255,m_config_path);
	CDataBase::Instance()->m_Connstring = pathbuf;
    
}

//获得代理信息
bool CMainFrame::GetProxyInfo()
{   
    CString strConnect =CDataBase::Instance()->m_Connstring;
	//连接数据库
	if(!CDataBase::Instance()->Opendb(strConnect))
	{   
		AfxMessageBox("连接数据库失败");
        return false;
	}
	//获得代理信息
    CString SQL = "SELECT * FROM Proxytable";
    LPProxyInfo proxy = NULL;
    CADORecordset* pRs = new CADORecordset(&(CDataBase::Instance()->m_DBConn));
    if(!pRs->Open((LPCTSTR)SQL))
	    return false;
    
	if(!pRs->IsEof())
	{   
		pRs->MoveFirst();
	    while(!pRs->IsEof())
		{   
			proxy = new ProxyInfo;
		
		    pRs->GetFieldValue("name",proxy->Name);
			pRs->GetFieldValue("address",proxy->ProxyAddr);
			pRs->GetFieldValue("port",proxy->port);
		    pRs->GetFieldValue("type",proxy->type);
            pRs->GetFieldValue("default",proxy->Default);
            
			if(proxy->Default)//设置默认代理
			{
				m_default_proxy = proxy;
			    //判断是否为IE代理
                if(proxy->Name.Find("IE")!=-1)
					m_ie_state = true; //更新菜单
			}
			m_proxy_list.push_back(proxy);
            pRs->MoveNext();
            
		
		}//while
	
	
	}
    return true;
}

bool CMainFrame::WriteProxyInfo(LPProxyInfo proxy)
{    
    ASSERT(proxy!=NULL);
	//判断纪录是否存在
	if(!Is_Exist_record(proxy))
       return true;
	CString strConnect =CDataBase::Instance()->m_Connstring;
	//连接数据库
	if(!CDataBase::Instance()->Opendb(strConnect))
	{   
		AfxMessageBox("连接数据库失败");
        return false;
	}
	//获得代理信息
    CString SQL = "SELECT * FROM Proxytable";
    
    CADORecordset* pRs = new CADORecordset(&(CDataBase::Instance()->m_DBConn));
    if(!pRs->Open((LPCTSTR)SQL))
	    return false;


	pRs->AddNew(); //添加一条空纪录
    pRs->SetFieldValue("name",proxy->Name);
	pRs->SetFieldValue("address",proxy->ProxyAddr);
	pRs->SetFieldValue("port",proxy->port);
	pRs->SetFieldValue("type",proxy->type);
	pRs->SetFieldValue("default",proxy->Default);
	pRs->Update();
    pRs->Close();
	//CDataBase::Instance()->m_DBConn.Close();//关闭连接
	m_proxy_list.push_back(proxy);
	return true;
}


//判断代理纪录是否存在
bool CMainFrame::Is_Exist_record(LPProxyInfo proxy)
{   
    
    ASSERT(proxy!=NULL);
    CString strConnect =CDataBase::Instance()->m_Connstring;
	//连接数据库
	if(!CDataBase::Instance()->Opendb(strConnect))
	{   
		AfxMessageBox("连接数据库失败");
        return false;
	}
	//获得代理信息
   
    CString SQL;
	SQL.Format("SELECT * FROM Proxytable WHERE address=\"%s\" AND port=%d",
		        proxy->ProxyAddr,proxy->port);
    CADORecordset* pRs = new CADORecordset(&(CDataBase::Instance()->m_DBConn));
    if(!pRs->Open((LPCTSTR)SQL))
	    return false;

    if(pRs->IsEof())
		return true;
        return false;
}

//重数据库中删除一个代理信息
bool CMainFrame::Delete_Proxy_Record(const LPProxyInfo proxy)
{
     ASSERT(proxy!=NULL);
     CString strConnect =CDataBase::Instance()->m_Connstring;
	//连接数据库
	 if(!CDataBase::Instance()->Opendb(strConnect))
	 {   
		AfxMessageBox("连接数据库失败");
        return false;
	 }

     CString SQL;
     SQL.Format("DELETE FROM Proxytable WHERE address=\"%s\" AND port=%d",
		        proxy->ProxyAddr,proxy->port);
     //先重队列中删除
	 DeleteProxy(proxy->Name);
     return CDataBase::Instance()->m_DBConn.Execute(SQL);
     
}
//更新下载信息
void CMainFrame::OnTimer(UINT nIDEvent)
{
	DOWNINFOMAP::iterator it = m_down_info_list.begin();
	LPDownLoadIndo load = NULL;
	
	for(;it!=m_down_info_list.end();it++)
	{
	     load = *it;
         Updata_Down_list(load);
	}

}

//更新下载列表框
void CMainFrame::Updata_Down_list(const LPDownLoadIndo pinfo)
{
     int id = pinfo->PID;
	 CString downloadtime = pinfo->downloadtime;
     CString finish=pinfo->finish;
     CString resettime= pinfo->resettime;
     CString speed= pinfo->speed;
     CalculateTime(id);//更新下载时间
	
	 WriteDownLoadLog(pinfo->PID,2,pinfo->progress); 
    
	 //WriteDownLoadLog(pinfo->PID,5,resettime);
	 //WriteDownLoadLog(pinfo->PID,6,speed); 
	 
}

//获得一个下载信息结构
LPDownLoadIndo CMainFrame::GetDownLoadInfo(int PID)
{
	DOWNINFOMAP::iterator it = m_down_info_list.begin();
	LPDownLoadIndo load = NULL;
	for(;it!=m_down_info_list.end();it++)
	{    
		 load = *it;
	     if(load->PID==PID)
	        break;
	
	}

    return load;
}

//计算下载时间
void CMainFrame::CalculateTime(int PID)
{
        
	    LPDownLoadIndo load = GetDownLoadInfo(PID);
      
        load->m_usetime.nSS=load->m_usetime.nSS+1;
		if(load->m_usetime.nSS>=59)
		{
			load->m_usetime.nSS=0;
			load->m_usetime.nMM+=1;
			if(load->m_usetime.nMM>=59)
			{
				load->m_usetime.nMM=0;
				load->m_usetime.nHH+=1;
			}
		}
       	//格式化
        char sz[9];
		CString ssz;

		FormatTime(load->m_usetime.nHH,load->m_usetime.nMM,load->m_usetime.nSS,sz); //排列计时器格式	
        ssz = sz;
		WriteDownLoadLog(PID,4,ssz);
        //更新到下载列表控件

}


//更新下在进度
void CMainFrame::Calculateprogress(int PID,int CID,long recvsize)
{   
	//获得PID对应的下载信息
    LPDownLoadIndo load = GetDownLoadInfo(PID);
	double progress;
	CString pr;
    long finish=0;
	CString fin;
	//已经下载字节数
    load->size[CID]=recvsize;
    
	for(int i=0;i<load->size.size();i++)
	{
	    finish+=load->size.at(i);
	}
    //progress = finish*100/load->filesize;
	progress = finish;
    pr.Format("%.2f",progress);
	load->progress = pr + "%";
   
   

}

void CMainFrame::OnUpdataProgress(WPARAM wParam,LPARAM lParam)
{    

⌨️ 快捷键说明

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