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

📄 qqdlg.cpp

📁 QQ自动注册软件源码,对感兴趣的人会有帮助的。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				HWND hWnd = ::FindWindowEx(NULL, NULL, "#32770", "Microsoft TCP/IP");
				if(hWnd)
				{
					::SendMessage(hWnd, WM_CLOSE, NULL, NULL);//发送关闭窗口事件
					bBadIPFlag = TRUE;
				}				
			}
			//Sleep(200);
			if(WaitForSingleObject(pi.hProcess,0)==WAIT_OBJECT_0)
				break;
		}
	}
	AddLog("更改IP地址返回:" + strBuf);
	strBuf.MakeUpper();
	if(strBuf.Find("无效")>-1 || strBuf.Find("INVALID")>-1)
	{
		AddLog("更改IP发生错误,终止程序");
		return 0;
	}
	if(bBadIPFlag)
	{
		AddLog("网上发现同名IP,IP冲突,退出。");
		return -1;
	}
	return 1;
}

BOOL CQQDlg::IsGoodIP()
{
	//ping 
	return FALSE;
}

void CQQDlg::OnSelectQqExecute() 
{
  TCHAR szFilters[]= _T("可执行程序 (*.exe)|*.exe|所有程序 (*.*)|*.*||");
  
  CFileDialog fileDlg (TRUE, _T("选择QQ执行文件路径"), _T("*.exe"),
	  OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, szFilters, this);
  
  if( fileDlg.DoModal ()==IDOK )
  {
	  m_strQQFile = fileDlg.GetPathName();
	  UpdateData(FALSE);
  }
	
}

void CQQDlg::OnSelectLogfile() 
{
  TCHAR szFilters[]= _T("文本文件 (*.txt)|*.txt|所有程序 (*.*)|*.*||");
  
  CFileDialog fileDlg (FALSE, _T("选择日志文件路径"), _T("*.txt"),
	  OFN_HIDEREADONLY, szFilters, this);
  
  if( fileDlg.DoModal ()==IDOK )
  {
	  m_strLogFileName = fileDlg.GetPathName();
	  UpdateData(FALSE);
  }
}


BOOL CALLBACK CQQDlg::EnumWindowsProc(HWND hwnd,
							  LPARAM lParam
							  )
{
	TCHAR szBuf[_MAX_PATH];
//	TCHAR szTitle[_MAX_PATH];	
	::GetClassName(hwnd, szBuf, _MAX_PATH);
	//	::GetWindowText(hwnd, szTitle, _MAX_PATH);
	
	if (lstrcmp(szBuf, "#32770") == 0) //发现窗口的类名,你这里给对话框好了
	{
		//EnumChildWindows(hwnd, EnumChildWindowsProc, NULL); //后面不用教了吧
//		AfxMessageBox(szTitle);
		if(::FindWindowEx(hwnd, NULL, NULL, "记住密码")!=NULL)
		{
			HWND hRunReg = ::FindWindowEx(hwnd, NULL, "Button", "注册向导");
			if(hRunReg!=NULL)
			{
				SendClickMessage(hRunReg);
				return FALSE;
			}
		}
	}
	return TRUE;
}

//自动跳过登录窗口,到书写邮件窗口
void CQQDlg::JumpLoginWindow()
{
	EnumWindows(EnumWindowsProc, NULL);
}



//自动填写数据
BOOL CALLBACK CQQDlg::EnumWindowsProcAutoInput(HWND hWnd,
									  LPARAM lParam
									  )
{
	static int nCounter = 0;
	TCHAR szBuf[_MAX_PATH];
	TCHAR szTitle[_MAX_PATH];	
	::GetClassName(hWnd, szBuf, _MAX_PATH);
	::GetWindowText(hWnd, szTitle, _MAX_PATH);
	
	if (lstrcmp(szBuf, "Edit") == 0 || lstrcmp(szBuf, "ComboBox")==0 ) //Edit类型
	{
		switch(nCounter)
		{
		case 1:
			SetRemoteText(hWnd, "机器人");
			break;
		case 2:
			SetRemoteText(hWnd, "26");
			break;
		case 3:
			SetVKDownMessage(hWnd);
			break;
		case 4:
			SetRemoteText(hWnd, g_strPass);
			break;
		case 5:
			SetRemoteText(hWnd, g_strPass);
			break;
		case 6:
			SetVKDownMessage(hWnd);
			break;
		case 8:
			SetVKDownMessage(hWnd);
			break;
		case 10:
			SetRemoteText(hWnd, "HUST");
			break;
		default:
			break;		
		}
		nCounter ++;
		if(nCounter>10)
		{
			nCounter = 0;//恢复
			return FALSE;
		}
	}
	return TRUE;
}

//自动输入信息
BOOL CQQDlg::AutoInputUserData()
{
	HWND hWnd = ::FindWindowEx(m_hNavigateWndID, NULL, "#32770", "基本资料");
	if(hWnd == NULL)
		return FALSE;
	EnumChildWindows(hWnd, EnumWindowsProcAutoInput, NULL);
	return TRUE;
}

void CQQDlg::SendClickMessage(HWND hWnd)
{
	if(IsWindow(hWnd))
	{
		::SendMessage(hWnd, WM_LBUTTONDOWN, NULL, NULL);
		::SendMessage(hWnd, WM_LBUTTONUP, NULL, NULL);
	}
}
void CQQDlg::PostClickMessage(HWND hWnd)
{
	if(IsWindow(hWnd))
	{
		::SendMessage(hWnd, WM_LBUTTONDOWN, NULL, NULL);
		::PostMessage(hWnd, WM_LBUTTONUP, NULL, NULL);//为避免弹出窗口死锁
	}
}

void CQQDlg::Delay(UINT n100S)
{
	Sleep(100*n100S);
}




void CQQDlg::SimulateKeyEvent(HWND hWnd, UINT nKeyCode)
{
	if(IsWindow(hWnd))
	{
		//::SendMessage(hWnd, WM_SETFOCUS, NULL, NULL);
		// Simulate a key press
		keybd_event( nKeyCode,
			0x45,
			KEYEVENTF_EXTENDEDKEY | 0,
			0 );
		
		// Simulate a key release
		keybd_event( nKeyCode,
			0x45,
			KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
			0);
	}
}

BOOL CQQDlg::SetClip(LPCTSTR lpszClip)
{
	HGLOBAL hglbCopy; 
	LPTSTR  lptstrCopy; 
	CString str = lpszClip;
	int cch = str.GetLength();
	
	hglbCopy = GlobalAlloc(GMEM_MOVEABLE, 
		(cch + 1) * sizeof(TCHAR)); 
	if (hglbCopy == NULL) 
	{ 
		::CloseClipboard(); 
		return FALSE; 
	} 
	// Lock the handle and copy the text to the buffer. 	
	lptstrCopy = (char*)GlobalLock(hglbCopy); 
	memcpy(lptstrCopy, str, 
		cch * sizeof(TCHAR)); 
	lptstrCopy[cch] = (TCHAR) 0;    // null character 
	GlobalUnlock(hglbCopy); 
	
	
	::OpenClipboard(NULL);
	::SetClipboardData(CF_TEXT, hglbCopy); 
	::CloseClipboard();
	return TRUE;
}

BOOL CQQDlg::SetRemoteText(HWND hWnd, LPCTSTR lpszStr)
{
	if(!SetClip(lpszStr))
		return FALSE;
	::SendMessage(hWnd, WM_SETFOCUS, 0, 0);
	::SendMessage(hWnd, WM_PASTE, 0, 0);
	return TRUE;
}

void CQQDlg::SetVKDownMessage(HWND hWnd)
{
	if(IsWindow(hWnd))
	{
		::SendMessage(hWnd, WM_KEYDOWN, VK_DOWN, 1);
		::SendMessage(hWnd, WM_KEYUP, VK_DOWN, 1);
	}
}

BOOL CQQDlg::ClickOKMessageBox()
{
	HWND hWnd = ::FindWindowEx(NULL, NULL, "#32770", "QQ");
	if(hWnd == NULL)
		return FALSE;
	hWnd = ::FindWindowEx(hWnd, NULL, "Button", "确定");
	if(hWnd == NULL)
		return FALSE;
	SendClickMessage(hWnd);
	return TRUE;
}

int CQQDlg::LoopSubmit()
{
	//return 0;
	SendClickMessage(m_hNextBtnID);

	HWND hOverBtn = ::FindWindowEx(m_hNavigateWndID, NULL,"Button", "完成");
	if(!hOverBtn)
	{
		AddLog("没找到关闭按钮!");
		return -2;
	}
	HWND hStateString = NULL;
	CString strState;
	while(1)
	{
		Delay();
		if(!::IsWindow(m_hNavigateWndID))
		{
			AddLog("程序关闭了!");
			return -2;
		}

		if(!hStateString)
		{
			HWND hWnd = ::FindWindowEx(m_hNavigateWndID, NULL,"#32770", "完成");
			if(!hWnd)
			{
				AddLog("没找到‘完成’按钮,奇怪了还!");
				return -2;
			}
			hStateString = ::FindWindowEx(hWnd, NULL, "Static", "正在向服务器提交请求");//查找窗口
			if(!hStateString)
			{
				hStateString = ::FindWindowEx(hWnd, NULL, "Static", "注册繁忙,请过一段时间再申请");
				if(!hStateString)
				{
					hStateString = ::FindWindowEx(hWnd, NULL, "Static", "连接服务器超时,请检查网络");
					if(!hStateString)
						hStateString= ::FindWindowEx(hWnd, NULL, "Static", "此地址申请号码过多,请过一段时间再申请");
				}	
			}
		}
		if(::IsWindowEnabled(hOverBtn) || ::IsWindowEnabled(m_hPreBtnID))
		{
			TCHAR cStat[MAX_PATH];
			::GetWindowText(hStateString, cStat, MAX_PATH);
			strState = cStat;
			if(strState.Find("注册繁忙")!=-1 || strState.Find("超时")!=-1)//逻辑
			{
				Delay();
				SendClickMessage(m_hPreBtnID);
				Delay();
				SendClickMessage(m_hNextBtnID);
				continue;
			}
			else if(strState.Find("恭喜") !=-1)
			{
				AddLog(strState);
				return 1;
			}
			else if(strState.Find("申请号码过多") != -1)
			{
				AddLog(strState);
				return -1;
			}
		}
	}
	return -2;
}




void CQQDlg::AddLog(LPCTSTR lpszLog)
{
	if(m_lstLog.GetCount()>100)
		m_lstLog.DeleteString(0);
	int nCount = m_lstLog.GetCount();
	CTime t = CTime::GetCurrentTime();
/*	time_t gmt = t.GetTime();asctime(gmtime(&gmt)) */
	CString strLog;
	strLog.Format("[%s] %s\r\n", t.Format("%H:%M:%S"), lpszLog);
	m_lstLog.AddString(strLog);
	m_lstLog.SetCurSel(nCount);

	if(m_fLogFile.m_hFile != CFile::hFileNull)//如果打开了就关闭
	{
		m_fLogFile.SeekToEnd();
		m_fLogFile.Write(strLog, strLog.GetLength());
	}
}

//必须安装Core SDK
//#include <Iphlpapi.h>
//#pragma comment( lib, "Iphlpapi" )
#define MAX_ADAPTER_DESCRIPTION_LENGTH  128 // arb.
#define MAX_ADAPTER_NAME_LENGTH         256 // arb.
#define MAX_ADAPTER_ADDRESS_LENGTH      8   // arb.


//
// IP_ADDRESS_STRING - store an IP address as a dotted decimal string
//

typedef struct {
    char String[4 * 4];
} IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;

//
// IP_ADDR_STRING - store an IP address with its corresponding subnet mask,
// both as dotted decimal strings
//

typedef struct _IP_ADDR_STRING {
    struct _IP_ADDR_STRING* Next;
    IP_ADDRESS_STRING IpAddress;
    IP_MASK_STRING IpMask;
    DWORD Context;
} IP_ADDR_STRING, *PIP_ADDR_STRING;



//
// ADAPTER_INFO - per-adapter information. All IP addresses are stored as
// strings
//
typedef struct _IP_ADAPTER_INFO {
    struct _IP_ADAPTER_INFO* Next;
    DWORD ComboIndex;
    char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
    char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
    UINT AddressLength;
    BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
    DWORD Index;
    UINT Type;
    UINT DhcpEnabled;
    PIP_ADDR_STRING CurrentIpAddress;
    IP_ADDR_STRING IpAddressList;
    IP_ADDR_STRING GatewayList;
    IP_ADDR_STRING DhcpServer;
    BOOL HaveWins;
    IP_ADDR_STRING PrimaryWinsServer;
    IP_ADDR_STRING SecondaryWinsServer;
    time_t LeaseObtained;
    time_t LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;

typedef DWORD (WINAPI* GetAdaptersInfoFunc)(
											PIP_ADAPTER_INFO pAdapterInfo,  // buffer to receive data
											PULONG pOutBufLen               // size of data returned
											);


///////////////////////////////////////////////////////////////////////////////


BOOL CQQDlg::ListAdapters()
{
	HMODULE hLib;
	GetAdaptersInfoFunc GetAdaptersInfo = NULL;

	PIP_ADAPTER_INFO pai = NULL;
	DWORD dwSize = 0;

	hLib = LoadLibrary("Iphlpapi.dll");
	if (!hLib)
	{
		AddLog("失败:无法装载 Iphlpapi.dll");
		return FALSE;
	}
	GetAdaptersInfo = (GetAdaptersInfoFunc)GetProcAddress(hLib, "GetAdaptersInfo");
	if (GetAdaptersInfo == NULL)
	{
		CString str;
		str.Format("错误:没有找到Iphlpapi.dll的函数入口!");
		AddLog(str);
		FreeLibrary(hLib);
		return FALSE;
	}
	
	// Get size of buffer needed:
	GetAdaptersInfo(NULL, &dwSize);
	if(dwSize >0)
	{
		pai = (PIP_ADAPTER_INFO)GlobalAlloc(GPTR, dwSize);
		if(GetAdaptersInfo(pai, &dwSize)!= ERROR_SUCCESS)
		{
			AddLog("错误:取网卡信息错!");
			FreeLibrary(hLib);
			return FALSE;		
		}
		PIP_ADAPTER_INFO p = pai;
		while (p)
		{
			SNetCardsData nc;
			
			
			//取名字,根据网卡的InterfaceName 从注册表中读取用户设置的名称
			CRegKey rkey;
			CString strKeyName;
			CString strName = "Unknow";
			strKeyName.Format("SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\%s\\Connection", p->AdapterName);
			if(rkey.Open(HKEY_LOCAL_MACHINE, strKeyName) == ERROR_SUCCESS)
			{	
				TCHAR szBuf[MAX_PATH + 1] = {0};
				DWORD	dwLen = MAX_PATH;
				if(rkey.QueryValue(szBuf, "Name", &dwLen) == ERROR_SUCCESS)
				{
					strName = szBuf;
				}
				rkey.Close();
			}
			nc.s_strName = strName;//"Unknow";//不知道
			nc.s_strDescript = p->Description;
			nc.s_strIp = CString(p->IpAddressList.IpAddress.String);
			nc.s_strMask = CString(p->IpAddressList.IpMask.String);
			m_aryNCs.Add(nc);
			p = p->Next;
		}
	}
	GlobalFree(pai);
	FreeLibrary(hLib);

	for(int i=0; i<m_aryNCs.GetSize(); i++)
	{
		m_cbNCSelect.AddString(m_aryNCs[i].s_strName + " (" + m_aryNCs[i].s_strDescript + ")");
	}
	m_cbNCSelect.SetCurSel(0);
	OnSelchangeComboNc();
	return TRUE;
}

void CQQDlg::OnDblclkListLog() 
{
	CString str;
	m_lstLog.GetText(m_lstLog.GetCaretIndex(), str);
	AfxMessageBox(str);	
}

void CQQDlg::OnSelchangeComboNc() 
{
	UpdateData();
	int nSelect = m_cbNCSelect.GetCurSel();
	if(nSelect>=0 && m_aryNCs.GetSize() > nSelect)
	{
		CString strIP = m_aryNCs[nSelect].s_strIp;
		int nFind = strIP.ReverseFind('.');
		m_strIpMask = strIP.Left(nFind);
		int nCur = atoi(strIP.Mid(nFind+1));
		m_nIpStart = nCur;
		m_nIpEnd = 254;
		m_strNCName = m_aryNCs[nSelect].s_strName;
		m_strMask   = m_aryNCs[nSelect].s_strMask;
		UpdateData(FALSE);
	}
}

⌨️ 快捷键说明

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