赞
踩
之前那个连点器,因为比较智障,不够智能,很容易被查出来,导致我的号被鬼使黑警告,扣了一半的体力和勾玉,西八。反思以后觉得,它检测脚本的原理应该是看你鼠标点击的频率。毕竟正常人点击屏幕的话,也就是开始的时候,点个开始,然后结束点几下。只有机器人会一直点来点去的。所以,进阶版来了
代码如下
#include <opencv2\opencv.hpp> #include <iostream> using namespace cv; int main() { Mat3b img = imread("F:/C语言学习/C语言学习代码/鼠标连点器plus/鼠标连点器PLUS/src.jpg"); if (!img.data) { std::cout << "Image not loaded"; return -1; } imshow("img", img); waitKey(); return 0; }
原因:
- 文件的路径可能出现问题,直接复制路径的话,结果是
“F:\C语言学习\C语言学习代码\鼠标连点器plus\鼠标连点器PLUS\src.jpg”
但是他读不出来,需要手动把路径改成
F:/C语言学习/C语言学习代码/鼠标连点器plus/鼠标连点器PLUS/src.jpg
斜杠的方向不一样- 在链接器->输入里面修改依赖项,删掉opencv_world451.lib 保留opencv_world451d.lib之后调试就可以了
刚开始我只是读取了yys的句柄,但是无法保存图片,也就是说无法进行模板匹配。
@Eleven
感谢大佬的源代码,可以将句柄保存为图片
我用的是VS2019 Community 然后有一些奇怪的问题
解决办法
解决方案
下面是根据句柄实现截图的代码,要引用axf.h头文件
BOOL SaveHwndToBmpFile(HWND hWnd, LPCTSTR lpszPath) { HWND hDesktop = ::GetDesktopWindow(); ASSERT(hDesktop); if (NULL == hWnd) { hWnd = hDesktop; } RECT rect; ::GetWindowRect(hWnd, &rect); int nWidht = rect.right - rect.left; int nHeight = rect.bottom - rect.top; HDC hSrcDC = ::GetWindowDC(hWnd); ASSERT(hSrcDC); HDC hMemDC = ::CreateCompatibleDC(hSrcDC); ASSERT(hMemDC); HBITMAP hBitmap = ::CreateCompatibleBitmap(hSrcDC, nWidht, nHeight); ASSERT(hBitmap); HBITMAP hOldBitmap = (HBITMAP)::SelectObject(hMemDC, hBitmap); ::BitBlt(hMemDC, 0, 0, nWidht, nHeight, hSrcDC, 0, 0, SRCCOPY); BITMAP bitmap = { 0 }; ::GetObject(hBitmap, sizeof(BITMAP), &bitmap); BITMAPINFOHEADER bi = { 0 }; BITMAPFILEHEADER bf = { 0 }; CONST int nBitCount = 24; bi.biSize = sizeof(BITMAPINFOHEADER); bi.biWidth = bitmap.bmWidth; bi.biHeight = bitmap.bmHeight; bi.biPlanes = 1; bi.biBitCount = nBitCount; bi.biCompression = BI_RGB; DWORD dwSize = ((bitmap.bmWidth * nBitCount + 31) / 32) * 4 * bitmap.bmHeight; HANDLE hDib = GlobalAlloc(GHND, dwSize + sizeof(BITMAPINFOHEADER)); LPBITMAPINFOHEADER lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib); *lpbi = bi; ::GetDIBits(hMemDC, hBitmap, 0, bitmap.bmHeight, (BYTE*)lpbi + sizeof(BITMAPINFOHEADER), (BITMAPINFO*)lpbi, DIB_RGB_COLORS); try { CFile file; file.Open(lpszPath, CFile::modeCreate | CFile::modeWrite); bf.bfType = 0x4d42; dwSize += sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); bf.bfSize = dwSize; bf.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); file.Write((BYTE*)&bf, sizeof(BITMAPFILEHEADER)); file.Write((BYTE*)lpbi, dwSize); file.Close(); } catch (CFileException* e) { e->ReportError(); e->Delete(); } GlobalUnlock(hDib); GlobalFree(hDib); ::SelectObject(hMemDC, hOldBitmap); ::DeleteObject(hBitmap); ::DeleteDC(hMemDC); ::ReleaseDC(hWnd, hSrcDC); return TRUE; }
上面的代码,我不是很懂,但是很好用就是了。下面是程序运行的结果,在后台也是可以截到图的!
读取到的图是这样的
产生原因:路径下无法打开该文件
解决办法:放绝对路径,或放到调试目录下
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
好像,不用这么麻烦,我用某精灵,实现了,西八。不过还是有一些收获的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。