2012QQ自-动-灌-水-机...
这篇文章昨晚就想写了,因为本软件也是昨晚完成的,无奈将软件放GE最喜欢的CSDN时,发现被和谐了
...
写完本软件,GE对-外-挂的-模拟技术有了进一步的了解、掌握...
效果截图如下:
...写完本软件,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);
}
探索代码的奥秘,享受技术的乐趣-_-!...

浙公网安备 33010602011771号