//首先,要得到对对碰的窗口,这个比较简单,可以用::FindWindow来实现,具体代码如下:
CQQGameToolDlg * dlg = (CQQGameToolDlg *)parm;//这里因为这个函数是作为一个线程来做的,所以得传递一个参数过来
dlg->hWnd = ::FindWindow(NULL,"QQ对对碰");//查询
if(dlg->hWnd == NULL)
dlg->hWnd = ::FindWindow(NULL,"对对碰");//好像窗口标题有时还不同,不知道是不是我自己搞错了
if(dlg->hWnd == NULL)
{
AfxMessageBox("未找到对对碰窗口,请首先启动对对碰!");
dlg->SetDlgItemText(IDC_BUTTON1,"启动");
dlg->m_bStart = false;
return 0;
}
dlg->hDc = ::GetDC(dlg->hWnd);
//下边的函数是为了获取每一个方格的数据的
COLORREF * CQQGameToolDlg::GetRectData(int x, int y)
{
COLORREF * color;
color = new COLORREF[48];
int count = 0;
for(int i=(x-1)*48 + m_posX;i<(x-1)*48 + m_posX + 48;i++)
{
color[count++] = GetPixel(hDc,i,(y-1)*48 + m_posY + 20);
//如果是棋盘的底色,则忽略
if(color[count-1] == 0x00efaa5a || color[count-1] == 0x00f7c384)
color[count-1] = 0x000000;
}
return color;
}
//下边的函数获取每个格子的特征点的数据:
//在这里我们只取六个特征点进行存储,把六个特征点的十六进制保存起来。
void CQQGameToolDlg::GetCode()
{
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++)
{
CString str;
COLORREF * c;
c = GetRectData(i,j);
str.Format("%x%x%x%x%x%c",c[25],c[26],c[27],c[28],c[29],c[30]);
data[i][j] = str;
}
}
//3)移动动物
void CQQGameToolDlg::DrawRect(int x, int y)
{
int xx,yy;
xx = (x-1)*48 + 10 + m_posX;
yy = (y-1)*48 + 10 + m_posY;
// ::Rectangle(hDc,xx,yy,xx + 10,yy + 10);//这里是画一个方块上去,注释掉了。
LPPOINT lpPoint = new CPoint();
lpPoint->x = xx;
lpPoint->y = yy;
::ClientToScreen(hWnd,lpPoint);
LPARAM lParam = MAKELPARAM(xx,yy);//鼠标点击的坐标
::SendMessage(hWnd,WM_LBUTTONDOWN,MK_LBUTTON,lParam);//发送鼠标DOWN的消息
::SendMessage(hWnd,WM_LBUTTONUP,MK_LBUTTON,lParam);//发送鼠标UP的消息
}
在网上下了一个外挂源程序调试一下!但有错误!
我是刚学用c++编有关于进程方面的程序!不知道是不是我的工程之类的建错了!希望高手告诉我详细的建工程的步骤!
还有我在vc++上调试有这样的错误:error C2143: syntax error : missing ';' before '*'
希望各位能够帮帮我!谢谢!
最后声明一下,这个程序还有那个找两个相同的方格的程序没完成!
[此贴子已经被作者于2007-9-10 23:12:41编辑过]