2012QQ自-动-灌-水-机...

这篇文章昨晚就想写了,因为本软件也是昨晚完成的,无奈将软件放GE最喜欢的CSDN时,发现被和谐了奋斗...

写完本软件,GE对-外-挂的-模拟技术有了进一步的了解、掌握...

效果截图如下:


主要代码如下:

//定时器消息处理函数
void CQQWateringDlg::OnTimer(UINT nIDEvent) 
{	

	//判断是否到达了指定发送次数
	if(flagCount==m_Count)
	{
		//关闭定时器函数
		CloseTimer();

		return;
	}
	
	//查找指定的窗口是否存在
	m_edtCaption.TrimLeft();
	m_edtCaption.TrimRight();
	HWND hQQ=::FindWindow(NULL,m_edtCaption);
	if(hQQ==NULL)
	{
		CloseTimer();
		AfxMessageBox("无法找到指定的窗口标题!...");
		return;
	}

	//将聊天窗口置前
	::SetForegroundWindow(hQQ);

	//获取窗口坐标
	RECT qqRect;
	::GetWindowRect(hQQ,&qqRect);

	//获取聊天窗口的高度
	long qqWinHeigth=qqRect.bottom-qqRect.top;

	//算出聊天窗口中的文本输入框的X坐标
	long x=qqRect.left+20;

	//算出聊天窗口中的文本输入框的Y坐标
	long y=qqRect.top+qqWinHeigth-60;

	//将鼠标移到指定位置
	::SetCursorPos(x,y);

	//鼠标左键在当前位置按下
	::mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);

	//鼠标左键在当前位置弹起
	::mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

	//往剪帖板写入数据
	WriteDataToClipboard(m_edtContent);

	//模拟键盘按键Ctrl+V
	keybd_event(VK_CONTROL, 0, 0, 0);
	keybd_event('V', 0, 0, 0);
	keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
	keybd_event('V', 0, KEYEVENTF_KEYUP, 0); 

	//获取发送按钮的屏幕X和Y坐标
	long sendX=qqRect.right-250;
	long sendY=qqRect.bottom-20;

	//模拟键盘按下Ctrl+Enter  
	keybd_event(VK_CONTROL, 0, 0, 0);
	keybd_event(VK_RETURN, 0, 0, 0);
	keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
	keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); 

	//将鼠标移到指定位置
	//::SetCursorPos(sendX,sendY);

	//鼠标左键在当前位置按下
	//::mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);

	//鼠标左键在当前位置弹起
	//::mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

	//次数加一
	flagCount++;

	//更新发送次数
	strSend.Format("已发送%d次...",flagCount);
	m_Edit_State.SetWindowText(strSend);
	m_Edit_State.SetReadOnly(true);
	CDialog::OnTimer(nIDEvent);
}




posted @ 2012-05-06 19:11  氺〤魚Oo。  阅读(190)  评论(0编辑  收藏  举报