当前位置:   article > 正文

带图像识别的YYS连点器 V2.0_识图连点器

识图连点器

之前那个连点器,因为比较智障,不够智能,很容易被查出来,导致我的号被鬼使黑警告,扣了一半的体力和勾玉,西八。反思以后觉得,它检测脚本的原理应该是看你鼠标点击的频率。毕竟正常人点击屏幕的话,也就是开始的时候,点个开始,然后结束点几下。只有机器人会一直点来点去的。所以,进阶版来了

第一个问题opencv imread()读取不到文件

代码如下

#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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

在这里插入图片描述

原因:

  1. 文件的路径可能出现问题,直接复制路径的话,结果是
    “F:\C语言学习\C语言学习代码\鼠标连点器plus\鼠标连点器PLUS\src.jpg”
    但是他读不出来,需要手动把路径改成
    F:/C语言学习/C语言学习代码/鼠标连点器plus/鼠标连点器PLUS/src.jpg
    斜杠的方向不一样
  2. 在链接器->输入里面修改依赖项,删掉opencv_world451.lib 保留opencv_world451d.lib之后调试就可以了

第二个问题怎样读取并保存yys的界面图片

刚开始我只是读取了yys的句柄,但是无法保存图片,也就是说无法进行模板匹配。
@Eleven
感谢大佬的源代码,可以将句柄保存为图片

我用的是VS2019 Community 然后有一些奇怪的问题

1.error LNK2019:无法解析的外部符号 __CrtDbgReportW

解决办法

  1. 打开项目,属性
  2. 在“高级”选项下,MFC的使用选择在共享DLL中使用MFC

在这里插入图片描述

2.#error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

解决方案
在这里插入图片描述
下面是根据句柄实现截图的代码,要引用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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72

上面的代码,我不是很懂,但是很好用就是了。下面是程序运行的结果,在后台也是可以截到图的!在这里插入图片描述

3.图像读取失败

读取到的图是这样的在这里插入图片描述
产生原因:路径下无法打开该文件
解决办法:放绝对路径,或放到调试目录下

第三个问题怎样进行模板匹配与定位

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
好像,不用这么麻烦,我用某精灵,实现了,西八。不过还是有一些收获的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/490000
推荐阅读
相关标签
  

闽ICP备14008679号