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

📄 qqlistdlg.cpp

📁 QQ自动登陆器
💻 CPP
字号:
// QQlistDlg.cpp : implementation file
//

#include "stdafx.h"
#include "QQ自动登陆器.h"
#include "QQlistDlg.h"
#include "MD5.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// QQlistDlg dialog


QQlistDlg::QQlistDlg(CWnd* pParent /*=NULL*/)
	: CDialog(QQlistDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(QQlistDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void QQlistDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(QQlistDlg)
	DDX_Control(pDX, IDC_LIST_QQNUMLIST, m_QIDList);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(QQlistDlg, CDialog)
	//{{AFX_MSG_MAP(QQlistDlg)
	ON_BN_CLICKED(IDC_BUTTON_ADDQQ, OnButtonAddqq)
	ON_BN_CLICKED(IDC_BUTTON_RUNQQ, OnButtonRunqq)
	ON_BN_CLICKED(IDC_BUTTON_LOGONTHIS, OnButtonLogonthis)
	ON_BN_CLICKED(IDC_BUTTON_EDITQQ, OnButtonEditqq)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST_QQNUMLIST, OnDblclkListQQnumlist)
	ON_BN_CLICKED(IDC_BUTTON_DELQQ, OnButtonDelqq)
	ON_BN_CLICKED(IDC_BUTTON_LOGONCHECKED, OnButtonLogonchecked)
	ON_BN_CLICKED(IDC_BUTTON_LOGONALL, OnButtonLogonall)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_QQNUMLIST, OnItemchangedListQqnumlist)
	ON_NOTIFY(NM_CLICK, IDC_LIST_QQNUMLIST, OnClickListQqnumlist)
	ON_NOTIFY(NM_RCLICK, IDC_LIST_QQNUMLIST, OnRclickListQqnumlist)
	ON_COMMAND(ID_MENUITEM_HELP, OnMenuitemHelp)
	ON_COMMAND(ID_MENUITEM_ALLSEL, OnMenuitemAllsel)
	ON_COMMAND(ID_MENUITEM_INVSEL, OnMenuitemInvsel)
	ON_COMMAND(ID_MENUITEM_LOGONALL, OnMenuitemLogonall)
	ON_COMMAND(ID_MENUITEM_LOGONCHKED, OnMenuitemLogonchked)
	ON_COMMAND(ID_MENUITEM_LOGONTHIS, OnMenuitemLogonthis)
	ON_COMMAND(ID_MENUITEM_NOSEL, OnMenuitemNosel)
	ON_COMMAND(ID_MENUITEM_CLR, OnMenuitemClr)
	ON_COMMAND(ID_MENUITEM_DEL, OnMenuitemDel)
	ON_COMMAND(ID_MENUITEM_EDIT, OnMenuitemEdit)
	ON_COMMAND(ID_MENUITEM_ADD, OnMenuitemAdd)
	ON_COMMAND(ID_MENUITEM_JUST_RUNQQ, OnMenuitemJustRunqq)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// QQlistDlg message handlers

BOOL QQlistDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	//获取原风格属性
	DWORD dwStyle = m_QIDList.GetExtendedStyle();
	//添加CheckBox、整行选中、表格线属性
	dwStyle |= LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES;
	//设置新属性到控件
	m_QIDList.SetExtendedStyle( dwStyle );

	m_QIDList.InsertColumn(0, "",	LVCFMT_LEFT, 20);
	m_QIDList.InsertColumn(1, "QQ号",	LVCFMT_LEFT, 72);
	m_QIDList.InsertColumn(2, "昵称",	LVCFMT_LEFT, 84);
	m_QIDList.InsertColumn(3, "状态",	LVCFMT_LEFT, 36);
	
	QQAdd.Create(IDD_DIALOG4,AfxGetMainWnd()->GetDlgItem(IDC_TAB1));
	bInitFinish = FALSE;
	bAddOrEditFinish = TRUE;
	InitQQList();

	return FALSE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void QQlistDlg::InitQQList()
{
	iCheckItems = 0;
	for (int i = 0; i< QQInfoList.size(); i++)
	{
		m_QIDList.InsertItem(i, "", 0);
		m_QIDList.SetItem(i, 1, LVIF_TEXT, QQInfoList[i].GetQQNbr(), 0, NULL, NULL, NULL);
		m_QIDList.SetItem(i, 2, LVIF_TEXT, QQInfoList[i].GetQQName(), 0, NULL, NULL, NULL);
		m_QIDList.SetItem(i, 3, LVIF_TEXT, QQInfoList[i].GetQQStat(), 0, NULL, NULL, NULL);
		m_QIDList.SetCheck(i,QQInfoList[i].IsUsing());
		if (QQInfoList[i].IsUsing())
		{
			iCheckItems++;
		}
	}
	if (QQInfoList.size() > 0)
	{
		m_QIDList.SetSelectionMark(0);   
		m_QIDList.SetItemState(0, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
	}
	QQListButtonUpdate();

	bInitFinish = TRUE;
}

void QQlistDlg::QQListButtonUpdate()
{
	if (QQInfoList.size() > 0)
	{
		int iItem = m_QIDList.GetSelectionMark();
		if (-1 != iItem)
		{
			CString sLogonSelect;
			sLogonSelect.Format("登第(%d)个",iItem+1);
			SetDlgItemText(IDC_BUTTON_LOGONTHIS, sLogonSelect);
		}
		else
		{
			SetDlgItemText(IDC_BUTTON_LOGONTHIS, "登选中");
		}
		if (iCheckItems)
		{
			CString sCheckItems;
			sCheckItems.Format("登打钩(%d)",iCheckItems);
			SetDlgItemText(IDC_BUTTON_LOGONCHECKED, sCheckItems);
		}
		else
		{
			SetDlgItemText(IDC_BUTTON_LOGONCHECKED, "登打钩");
		}
		CString sAllItems;
		sAllItems.Format("登全部(%d)",QQInfoList.size());
		SetDlgItemText(IDC_BUTTON_LOGONALL, sAllItems);
	}
	else
	{
		SetDlgItemText(IDC_BUTTON_LOGONTHIS, "登选中");
		SetDlgItemText(IDC_BUTTON_LOGONCHECKED, "登打钩");
		SetDlgItemText(IDC_BUTTON_LOGONALL, "登全部");
	}
}

// 切换到QQ设置界面
void QQlistDlg::ChangeToQQSetDlg()
{
	CTabCtrl* pQListTab = (CTabCtrl*)((CDialog*)AfxGetMainWnd())->GetDlgItem(IDC_TAB1);
	pQListTab->SetCurSel(1);
	NMHDR   nmhdr;
	nmhdr.code=TCN_SELCHANGE;   
	nmhdr.hwndFrom=pQListTab->GetSafeHwnd(); 
	nmhdr.idFrom=IDC_TAB1;
	::SendMessage(nmhdr.hwndFrom,WM_NOTIFY,(WPARAM)IDC_TAB1,(LPARAM)(&nmhdr));
}

void QQlistDlg::OnButtonRunqq() 
{
	if (QQPathValid)
	{
		RunQQ(g_QQPath,"");
	}
	else
	{
		ChangeToQQSetDlg();
	}
}

void QQlistDlg::OnButtonLogonthis() 
{
	int QQIdx = m_QIDList.GetSelectionMark();
	if (QQPathValid) // && QQInfoList[QQIdx].IsUsing()
	{
		if (-1 != QQIdx)
		{
			vector<CString> LogonedQQList;
			FindLogonedQQ(LogonedQQList);
			if (!IsInLogonedList(QQInfoList[QQIdx].GetQQNbr(), LogonedQQList))
			{
				RunQQ(g_QQPath,QQInfoList[QQIdx].GetQQLogonStr());
			}
		}
	}
	else
	{
		ChangeToQQSetDlg();
	}
}

void QQlistDlg::OnButtonLogonchecked() 
{
	if (QQPathValid)
	{
		vector<CString> LogonedQQList;
		FindLogonedQQ(LogonedQQList);
		for (int i = 0; i < QQInfoList.size(); i++)
		{
			if (QQInfoList[i].IsUsing() && !IsInLogonedList(QQInfoList[i].GetQQNbr(), LogonedQQList))
			{
				RunQQ(g_QQPath,QQInfoList[i].GetQQLogonStr());
			}
		}
		if (g_AutoExit == "是")
		{
			::SendMessage(AfxGetMainWnd()->m_hWnd,WM_CLOSE,NULL,NULL);
		}
	}
	else
	{
		ChangeToQQSetDlg();
	}
}

void QQlistDlg::OnButtonLogonall() 
{
	if (QQPathValid)
	{
		for (int i = 0; i < QQInfoList.size(); i++)
		{
			vector<CString> LogonedQQList;
			FindLogonedQQ(LogonedQQList);
			if (!IsInLogonedList(QQInfoList[i].GetQQNbr(), LogonedQQList))
			{
				RunQQ(g_QQPath,QQInfoList[i].GetQQLogonStr());
			}
		}
		if (g_AutoExit == "是")
		{
			::SendMessage(AfxGetMainWnd()->m_hWnd,WM_CLOSE,NULL,NULL);
		}
	}
	else
	{
		ChangeToQQSetDlg();
	}
}

// 切换到QQ添加界面
void QQlistDlg::ChangeToAddQQDlg()
{
	ShowWindow(SW_HIDE);
	CRect rs;
	QQAdd.GetParent()->GetClientRect(rs);
	rs.top+=20;
	rs.bottom-=4;
	rs.left+=4;
	rs.right-=4;
	QQAdd.MoveWindow(rs);
	QQAdd.SetDlgItemText(IDC_RESULT_INFO, "赶快啊!打个字都这么慢!");
	QQAdd.ShowWindow(SW_SHOW);
	ShowAddDlg = TRUE;
}

void QQlistDlg::OnButtonAddqq() 
{
	ChangeToAddQQDlg();
	QQAdd.ClearQQInfo();
}

void QQlistDlg::OnButtonEditqq()
{
	QQInfoIndex = m_QIDList.GetSelectionMark();
	if (-1 == QQInfoIndex)
	{
		if (0 == m_QIDList.GetItemCount())
		{
			//AfxMessageBox("错误: 列表中还没添加任何QQ号!");
		}
		else
		{	
			//AfxMessageBox("错误: 请先选择一个QQ号,再继续操作!");
		}
		return;
	}
	else
	{
		EditQQInfo = TRUE;
		ChangeToAddQQDlg();
		QQAdd.SetQQInfoShow(QQInfoList[QQInfoIndex]);
	}
}

void QQlistDlg::OnDblclkListQQnumlist(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	if (0 != pNMListView->iSubItem)
	{
		OnButtonLogonthis();
	}
	*pResult = 0;
}

void QQlistDlg::QQListUpdate()
{
	bAddOrEditFinish = FALSE;
	if (QQListNeedUpdate) // 修改了
	{
		if (TRUE == EditQQInfo) // 是编辑其中一项
		{
			if (-1!=QQInfoIndex && QQInfoIndex < m_QIDList.GetItemCount())
			{
				int i = QQInfoIndex;
				m_QIDList.SetItem(i, 1, LVIF_TEXT, QQInfoList[i].GetQQNbr(), 0, NULL, NULL, NULL);
				m_QIDList.SetItem(i, 2, LVIF_TEXT, QQInfoList[i].GetQQName(), 0, NULL, NULL, NULL);
				m_QIDList.SetItem(i, 3, LVIF_TEXT, QQInfoList[i].GetQQStat(), 0, NULL, NULL, NULL);
				m_QIDList.SetCheck(i,QQInfoList[i].IsUsing());
				m_QIDList.SetSelectionMark(i);
			}
		}
		else // 添加一项或多项
		{
			/*
			if (m_QIDList.GetItemCount()>0)
			{
				m_QIDList.DeleteAllItems();
			}*/
			
			for (int i = g_QQListLength; i< QQInfoList.size(); i++)
			{
				m_QIDList.InsertItem(i, "", 0);
				m_QIDList.SetItem(i, 1, LVIF_TEXT, QQInfoList[i].GetQQNbr(), 0, NULL, NULL, NULL);
				m_QIDList.SetItem(i, 2, LVIF_TEXT, QQInfoList[i].GetQQName(), 0, NULL, NULL, NULL);
				m_QIDList.SetItem(i, 3, LVIF_TEXT, QQInfoList[i].GetQQStat(), 0, NULL, NULL, NULL);
				m_QIDList.SetCheck(i,QQInfoList[i].IsUsing());
				iCheckItems++;
			}
			g_QQListLength = QQInfoList.size();
			QQListButtonUpdate();
		}
	}
	else // 没修改
	{
		// 什么都不做
	}
	UpdateWindow();
	
	EditQQInfo = FALSE;
	QQInfoIndex = -1;
	QQListNeedUpdate = FALSE;
	bAddOrEditFinish = TRUE;
}

void QQlistDlg::OnButtonDelqq() 
{	
	int ToDelIndx = m_QIDList.GetSelectionMark();
	if (-1 == ToDelIndx)
	{
		if (0 == m_QIDList.GetItemCount())
		{
			//AfxMessageBox("错误: 列表中还没添加任何QQ号!");
		}
		else
		{	
			//AfxMessageBox("错误: 请先选择一个QQ号,再继续操作!");
		}
		return;
	}
	else
	{
		CString QQNbrToDel = QQInfoList[ToDelIndx].GetQQNbr();
		CString WarnningMsg = "确认将 QQ: " + QQNbrToDel + " 从列表中删除吗?";
		if (IDOK == MessageBox(WarnningMsg, "注意:", MB_OKCANCEL))
		{
			if (QQInfoList[ToDelIndx].IsUsing())
			{
				iCheckItems--;
			}
			m_QIDList.DeleteItem(ToDelIndx);
			std::vector<QQInfo>::iterator pos=QQInfoList.begin();
			QQInfoList.erase(pos+ToDelIndx);
			g_QQListLength = QQInfoList.size();

			if (ToDelIndx-1 >= 0)
			{
				m_QIDList.SetSelectionMark(ToDelIndx-1);   
				m_QIDList.SetItemState(ToDelIndx-1, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
			}
			else if (ToDelIndx < QQInfoList.size())
			{
				m_QIDList.SetSelectionMark(ToDelIndx);   
				m_QIDList.SetItemState(ToDelIndx, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
			}
			QQListButtonUpdate();
			// 清空,再写入
			WriteIniQQList(QQLIST_CONTENT, QQLISTNO, QQInfoList, g_ConfigFilePath, TRUE);
			CString QQCount;
			QQCount.Format("%d",g_QQListLength);
			WritePrivateProfileString(MAIN_CONFIG,QQLIST_LEN,QQCount,g_ConfigFilePath);
		}
	}
}

BOOL QQlistDlg::PreTranslateMessage(MSG* pMsg) 
{
	if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
	{
		return TRUE;
	}
	if (pMsg->message == WM_KEYDOWN && (pMsg->wParam == VK_SPACE || pMsg->wParam == VK_ESCAPE))
	{
		return TRUE;
	}

	return CDialog::PreTranslateMessage(pMsg);
}

void QQlistDlg::OnItemchangedListQqnumlist(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LPNMITEMACTIVATE pNMLV = (LPNMITEMACTIVATE)pNMHDR;
	if (bInitFinish && bAddOrEditFinish)
	{
		int i = pNMLV->iItem;
		if((pNMLV->uOldState & INDEXTOSTATEIMAGEMASK(1)) /* old state : unchecked */ 
			&& (pNMLV->uNewState & INDEXTOSTATEIMAGEMASK(2))) /* new state : checked */ 			
		{
			QQInfoList[i].SetQQUsOrNot("挂");
			WriteIniQQNbr(QQLIST_CONTENT, QQLISTNO, i, QQInfoList[i].GetConfStr(), g_ConfigFilePath);
			iCheckItems++;
			QQListButtonUpdate();
		} 
		else if((pNMLV->uOldState & INDEXTOSTATEIMAGEMASK(2)) /* old state : checked */ 
			&& (pNMLV->uNewState & INDEXTOSTATEIMAGEMASK(1))) /* new state : unchecked */ 				 
		{
			QQInfoList[i].SetQQUsOrNot("停");
			WriteIniQQNbr(QQLIST_CONTENT, QQLISTNO, i, QQInfoList[i].GetConfStr(), g_ConfigFilePath);
			iCheckItems--;
			QQListButtonUpdate();
		}
		else 
		{
			// 状态没变
		}
	  }

	*pResult = 0;
}

void QQlistDlg::OnClickListQqnumlist(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LPNMITEMACTIVATE lpNMIA = (LPNMITEMACTIVATE)pNMHDR;
    int nItem = lpNMIA->iItem;
	if (-1 != nItem)
	{
		CString sLogonSelect;
		sLogonSelect.Format("登第(%d)个",nItem+1);
		SetDlgItemText(IDC_BUTTON_LOGONTHIS, sLogonSelect);
	}
	*pResult = 0;
}

void QQlistDlg::OnRclickListQqnumlist(NMHDR* pNMHDR, LRESULT* pResult) 
{

	LPNMITEMACTIVATE lpNMIA = (LPNMITEMACTIVATE)pNMHDR;
    int nItem = lpNMIA->iItem;
	if (-1 != nItem)
	{
		CString sLogonSelect;
		sLogonSelect.Format("登第(%d)个",nItem+1);
		SetDlgItemText(IDC_BUTTON_LOGONTHIS, sLogonSelect);
	}

	POINT point = lpNMIA->ptAction;
	CMenu menu;
	menu.LoadMenu(IDR_MENU_QQLIST);
	CMenu* pPopup = menu.GetSubMenu(0);
	ClientToScreen(&point);
	pPopup->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON,point.x,point.y,this);

	*pResult = 0;
}

void QQlistDlg::OnMenuitemHelp() 
{
	AfxMessageBox("没有帮助!");
}

void QQlistDlg::OnMenuitemAllsel() 
{
	bAddOrEditFinish = FALSE;
	for (int i = 0; i < QQInfoList.size(); i++)
	{
		QQInfoList[i].SetQQUsOrNot("挂");
		m_QIDList.SetCheck(i,1);
		WriteIniQQNbr(QQLIST_CONTENT, QQLISTNO, i, QQInfoList[i].GetConfStr(), g_ConfigFilePath);
	}
	iCheckItems = QQInfoList.size();
	QQListButtonUpdate();
	bAddOrEditFinish = TRUE;
}

void QQlistDlg::OnMenuitemInvsel() 
{
	bAddOrEditFinish = FALSE;
	for (int i = 0; i < QQInfoList.size(); i++)
	{
		if (QQInfoList[i].IsUsing())
		{
			QQInfoList[i].SetQQUsOrNot("停");
			iCheckItems--;
		}
		else
		{
			QQInfoList[i].SetQQUsOrNot("挂");
			iCheckItems++;
		}
		m_QIDList.SetCheck(i,QQInfoList[i].IsUsing());
		WriteIniQQNbr(QQLIST_CONTENT, QQLISTNO, i, QQInfoList[i].GetConfStr(), g_ConfigFilePath);
	}
	QQListButtonUpdate();
	bAddOrEditFinish = TRUE;
}

void QQlistDlg::OnMenuitemNosel() 
{
	bAddOrEditFinish = FALSE;
	for (int i = 0; i < QQInfoList.size(); i++)
	{
		QQInfoList[i].SetQQUsOrNot("停");
		m_QIDList.SetCheck(i,0);
		WriteIniQQNbr(QQLIST_CONTENT, QQLISTNO, i, QQInfoList[i].GetConfStr(), g_ConfigFilePath);
	}
	iCheckItems = 0;
	QQListButtonUpdate();
	bAddOrEditFinish = TRUE;
}

void QQlistDlg::OnMenuitemJustRunqq() 
{
	OnButtonRunqq();
}

void QQlistDlg::OnMenuitemLogonthis() 
{
	OnButtonLogonthis();
}

void QQlistDlg::OnMenuitemLogonchked() 
{
	OnButtonLogonchecked();
}

void QQlistDlg::OnMenuitemLogonall() 
{
	OnButtonLogonall();
}

void QQlistDlg::OnMenuitemAdd() 
{
	OnButtonAddqq();
}

void QQlistDlg::OnMenuitemEdit() 
{
	OnButtonEditqq();
}

void QQlistDlg::OnMenuitemDel() 
{
	OnButtonDelqq();
}

void QQlistDlg::OnMenuitemClr() 
{
	QQInfoList.clear();
	m_QIDList.DeleteAllItems();
	WritePrivateProfileString(MAIN_CONFIG,QQLIST_LEN,"0",g_ConfigFilePath);
	WritePrivateProfileString(QQLIST_CONTENT,NULL,NULL,g_ConfigFilePath);
	QQListButtonUpdate();
	iCheckItems = 0;
	g_QQListLength = 0;
}

⌨️ 快捷键说明

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