900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 大家来找茬辅助工具实现

大家来找茬辅助工具实现

时间:2023-04-25 09:38:04

相关推荐

大家来找茬辅助工具实现

昨天看到同学在玩大家来找茬,一时兴起,打算自己写个辅助工具。其实游戏很简单,就是找出两幅图片中的不同之处。游戏规则了解了,那外挂的思路也就很明朗了只要对比两幅图片的像素,有不相同就存储进数组就可以了。有了思路,就开工吧!

首先用FindWindow获取大家来找茬的窗口指针,获取窗口大小,可以支持两个版本——大家来找茬和美女来找茬,其实就是窗口大小不同,图片大小不同。(我没有实现美女来找茬版本,大家可以自己尝试一下)

void CMyDlg::SmallVersion(CWnd *pWndDest,CWnd *pWndSrc){HBITMAP hBitmap, hOldBitmap; // 位图句柄 HDChPicture,hMypicture;int nHeight,nWidth;if(array.GetSize()!=0)array.RemoveAll();if(pWndDest==NULL || pWndSrc==NULL)return ;hPicture=pWndSrc->GetDC()->m_hDC;hMypicture=CreateCompatibleDC(hPicture);//创建与游戏DC相容的DCnWidth=377;//横宽为游戏中图片的大小 可以用Photoshop等工具测出nHeight=283;hBitmap=CreateCompatibleBitmap(hPicture,nWidth,nHeight);//创建与源窗口设备描述表相容位图hOldBitmap=(HBITMAP)SelectObject(hMypicture,hBitmap);// 把新位图选到内存设备描述表中BitBlt(hMypicture,0,0,nWidth,nHeight,hPicture,11,187,SRCCOPY);// 把屏幕设备描述表拷贝到内存设备描述表中hBitmap=(HBITMAP)SelectObject(hMypicture,hOldBitmap);//得到位图的句柄CDC dcMem;dcMem.CreateCompatibleDC(GetDC());//创建一个与目标窗口设备描述表兼容的位图HBITMAP poldBitmap=(HBITMAP)SelectObject(dcMem.m_hDC,hBitmap);GetDC()->StretchBlt(5,5,nWidth,nHeight,&dcMem,0,0,nWidth,nHeight,SRCCOPY);//显示位图DeleteDC(hPicture);DeleteDC(hPicture);dcMem.SelectObject(poldBitmap); dcMem.DeleteDC();CDC* pDC;pDC = pWndSrc->GetDC();CPoint* pt;for(int x=11;x<388;x+=2)//依次比较两幅图片每个像素不同之处{for(int y=187;y<469;y+=2){if(pDC->GetPixel(x,y) != pDC->GetPixel(x+393,y)){pt = new CPoint(x+5-11,y+5-187);array.Add(pt);}}}pDC=pWndDest->GetDC();for(int p=0;p<array.GetSize();p++)//把不同的点设置红色{CPoint pt=*((CPoint*)array.GetAt(p));CPoint temp = *((CPoint*)array.GetAt(p));pDC->SetPixel(temp,RGB(255,0,0));}}

这个函数就可以实现在自己的界面上显示两幅图片的不同之处,可如果要实现模拟鼠标单击游戏窗口的事件,还需要几步。

思路是这样的,在点击鼠标的时候用GetCursorPos获取鼠标的坐标,然后用ScreenToClient转换为当前窗口的坐标,得到了相对坐标,我们就可以利用自己图片和游戏窗口中图片的位置关系,计算出游戏窗口中的坐标。 有了坐标,我们就用::FindWindow来找到游戏窗口的句柄,然后用::PostMessage即可发送消息,即完成了模拟点击事件。

当然,程序写的比较粗糙,还存在很多问题,比如找茬的时候会存在明显的延迟。

源码:/source/1657261

欢迎大家指出不足之处。

程序效果图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。