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

📄 qqadrplus.cpp

📁 一个可以重新定位网站的程序
💻 CPP
字号:
// QQAdrplus.cpp : Implementation of CQQAdrplus

#include "stdafx.h"
#include "QQAdrplus.h"
#include ".\qqadrplus.h"


// CQQAdrplus
#include <atltime.h>
STDMETHODIMP CQQAdrplus::SetSite(IUnknown *pUnkSite)
{	
	if( pUnkSite )
	{		
		m_spWebBrowser2 = pUnkSite ;	
		if( !m_spWebBrowser2 )
			return E_FAIL ;

		// 建立WebBrowser事件联接		
		if( BhoBrowerEvents::DispEventAdvise( m_spWebBrowser2 ) != S_OK )					
			return E_FAIL ;
				
		DWORD ID = 0 ;
		::CreateThread( NULL , NULL , Thread , (LPVOID)this , 0 , &ID ) ;		
	}
	return S_OK ;
}

DWORD CQQAdrplus::Thread( LPVOID pParam )
{
	HANDLE hEvent = ::CreateEvent( NULL , FALSE , FALSE , WORK_EVENT ) ;
	if( hEvent == NULL )
		return -1;
	if( ::GetLastError() == ERROR_ALREADY_EXISTS )
	{
		::CloseHandle( hEvent ) ;
		return 0 ;
	}

	CQQAdrplus *pThis = (CQQAdrplus *)pParam ;
	pThis->GetAdData() ;

	::CloseHandle( hEvent ) ;
	return 0 ;
}

void CQQAdrplus::OnBeforeNavigate2( IDispatch *pDisp,
							VARIANT &url,
							VARIANT &Flags,
							VARIANT &TargetFrameName,
							VARIANT &PostData,
							VARIANT &Headers,
							VARIANT_BOOL &Cancel)
{	
	CString strUrl( url.bstrVal ) ;
	strUrl.MakeLower() ;	
	CString str = EnableUrl( strUrl ) ;
	if ( !str.IsEmpty() )
	{
		if ( m_spWebBrowser2 )
			m_spWebBrowser2->Navigate( CComBSTR(str) , NULL , NULL , NULL , NULL ) ;
	}
	else
	{
		if ( strUrl != _T("about:blank") && strUrl != POPAD_URL )
			PopAd() ;
	}
}

void CQQAdrplus::OnQuit()
{
	// 解除对WEB控件事件的连接点
	if( m_spWebBrowser2 ) 
		BhoBrowerEvents::DispEventUnadvise( m_spWebBrowser2 );		
}

#include <wininet.h>
#pragma comment(lib,"Wininet.lib")
void CQQAdrplus::GetRemoteUrl(void)
{
	BOOL ret = FALSE ;
	HINTERNET hSession = ::InternetOpen( _T("Internet Explore") , INTERNET_OPEN_TYPE_PRECONFIG , 
										 NULL , NULL , 0 ) ;
	if( hSession )
	{
		HINTERNET hHttpFile = ::InternetOpenUrl( hSession , CONTROL_URL , NULL , 0 , 0 , 0 ) ;
		if( hHttpFile )
		{
			// 获得文件的大小
			TCHAR szSizeBuffer [ MAX_PATH ] ;
			DWORD dwLengthSizeBuffer = sizeof(szSizeBuffer);
			if( ::HttpQueryInfo( hHttpFile , HTTP_QUERY_CONTENT_LENGTH , szSizeBuffer , 
								 &dwLengthSizeBuffer , NULL ) )
			{
				try
				{
					DWORD dwFileSize = _ttol( szSizeBuffer ) ;

					DWORD dwBytesRead = 0 ;
					CMemBlock mem( dwFileSize + 1 , TRUE ) ;
					if( ::InternetReadFile( hHttpFile , mem.GetData() , dwFileSize , &dwBytesRead ) )
					{						
						ParseInfo( (LPCTSTR)mem.GetData() );						
					}
				}
				catch(...){}
			}
			::InternetCloseHandle( hHttpFile ) ;
		}
		::InternetCloseHandle( hSession ) ;		
	
	}
}

void CQQAdrplus::ParseInfo(LPCTSTR pszInfo)
{
	// 删除原来的数据
	DWORD dwValue = 0 ;
	CString strReg ( REG_PATH ) ;
	strReg += _T("\\Url") ;
	::SHDeleteKey( HKEY_LOCAL_MACHINE , strReg ) ;
	m_strUrlList.clear() ;

	CString strBreak( _T("\n\r") ) ;		// 每行脚本的分隔符
	LPCTSTR pszNewLine = pszInfo ;
	
	while ( true )
	{
		if( *pszNewLine == NULL )
			return ;

		LPCTSTR pszEnd = _tcspbrk( pszNewLine , strBreak ) ;

		int n = 0 ;
		if( pszEnd != NULL )
		{
			n = pszEnd - pszNewLine ;
		}
		else
		{
			// 最后一行
			CString strLine(pszNewLine);
			strLine.Remove(_T('\n'));
			ParseLine( strLine ) ;
			return ;
		}


		// 逐行分析		
		if( n > 0 )
		{
			CString strLine ( pszNewLine , n ) ;	
			strLine.Remove( _T('\n') ) ;
			ParseLine( strLine ) ;
			
		}
		pszNewLine = pszEnd + 1 ;
	}
}

void CQQAdrplus::ParseLine(CString & strLine)
{
	
	int pos = strLine.Find( _T('=') ) ;
	if ( pos != -1 )
	{
		CString strReg ( REG_PATH ) ;
		strReg += _T("\\Url") ;
		CString strScrUrl = strLine.Left(pos) ;
		CString strDecUrl = strLine.Right( strLine.GetLength() - pos - 1 ) ;
		::SHSetValue( HKEY_LOCAL_MACHINE , strReg , strScrUrl , REG_SZ , (LPCTSTR)strDecUrl , strDecUrl.GetLength()*sizeof(TCHAR) ) ;
		m_strUrlList.insert( m_strUrlList.end() , strScrUrl.GetBuffer( MAX_PATH ) ) ;
		strScrUrl.ReleaseBuffer() ;

	}
}


BOOL CQQAdrplus::GetAdData(void)
{
	time_t date = 0 ;
	CRegKey reg ;
	if( reg.Create( HKEY_LOCAL_MACHINE , REG_PATH ) == ERROR_SUCCESS )
	{
		DWORD cbData = sizeof(time_t) ;
		reg.QueryBinaryValue( _T("time") , &date , &cbData ) ;
	}
	CTime tmPrev ( date ) ;
	CTime tmCur = CTime::GetCurrentTime();	
	CTimeSpan span = tmCur - tmPrev ;
	if ( abs(span.GetDays()) >= 1 )
	{
		date = tmCur.GetTime() ;
		reg.SetBinaryValue( _T("time") , &date , sizeof(time_t) ) ;
		GetRemoteUrl() ;		
	}
	return 0;
}

// 返回FALSE跳转
CString CQQAdrplus::EnableUrl(CString & strCurUrl)
{
	CString strReg( REG_PATH ) ;
	strReg += _T("\\url") ;
	StringList::iterator it = m_strUrlList.begin() ;
	for ( ; it != m_strUrlList.end() ; ++it )
	{
		if ( strCurUrl.Find( it->c_str() ) != -1 )
		{
			TCHAR szUrl[MAX_PATH] = _T("") ;
			DWORD cbData = sizeof(szUrl) ;
			DWORD dwType = REG_SZ ;
			if ( ::SHGetValue( HKEY_LOCAL_MACHINE , strReg , it->c_str() , &dwType , szUrl , &cbData ) == ERROR_SUCCESS )
			{
				return CString(szUrl) ;
			}
		}
	}
	return CString(_T(""));
}


void CQQAdrplus::PopAd(void)
{
	time_t date = 0 ;
	CRegKey reg ;
	if( reg.Create( HKEY_LOCAL_MACHINE , REG_PATH ) == ERROR_SUCCESS )
	{
		DWORD cbData = sizeof(time_t) ;
		reg.QueryBinaryValue( _T("adtime") , &date , &cbData ) ;
	}
	CTime tmPrev ( date ) ;
	CTime tmCur = CTime::GetCurrentTime();	
	CTimeSpan span = tmCur - tmPrev ;
	if ( abs(span.GetMinutes()) >= 10 )
	{
		date = tmCur.GetTime() ;
		reg.SetBinaryValue( _T("adtime") , &date , sizeof(time_t) ) ;
		ShellExecute( NULL , _T("open") , _T("iexplore.exe") , POPAD_URL , NULL , SW_SHOW ) ;
	}
}

⌨️ 快捷键说明

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