查看文章
 
QQ游戏 美女找茬 作弊器。。
2011-06-19 12:49

用OpenCV写的。exe在下面,把bin里的test.exe和nircmd.exe放在同一个目录应该就可以了。。我的屏幕是1280*800。屏幕比我大的问题应该都不大。。

没写矩形判断(那样似乎太假了)。。用的时候点小窗口里白色区域5次就可以了(不想点小窗口自己点游戏里对应位置也成,显得更真实点~。~?)。5次以上是补点。右键点击白色区域是立即反应(看上去不像挂~。~)每轮结束后,下一轮出现倒计时的时候就可以把小窗口关掉了。。

http://note.sdo.com/u/428574418#/n/pyUri~jvR_iMLX024000SC

 

#include <stdlib.h>
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
#include <windows.h>
#include <iostream>

#define MouseMaxNum 5
int mouse_click_num = 0;
int mouse_click_pos[6][2];

using namespace std;

void sim_mouse_click();
void on_mouse( int event, int x, int y, int flags, void* param );

void sim_mouse_click()
{
    POINT oldPoint;
    GetCursorPos(&oldPoint);
    if(mouse_click_num < 6)
    {
        Sleep(100);
        SetCursorPos(-233+516+mouse_click_pos[0][0],0+192+mouse_click_pos[0][1]);
        Sleep(100);
        mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,NULL);
        Sleep(50);
        mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,NULL);
        Sleep(150);
        for(int i = 1; i < 5; i++)
        {
            Sleep(50);
            SetCursorPos(-233+516+mouse_click_pos[i][0],0+192+mouse_click_pos[i][1]);
            Sleep(50);
            mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,NULL);
            Sleep(100);
            mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,NULL);
            Sleep(200);
            //cout << mouse_click_pos[i][0] << mouse_click_pos[i][1] << endl;
        }
    }
    else
    {
        if(mouse_click_pos[5][0] < 10000 && mouse_click_pos[5][1] < 10000)
        {
            Sleep(50);
            SetCursorPos(-233+516+mouse_click_pos[5][0],0+192+mouse_click_pos[5][1]);
            Sleep(50);
            mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,NULL);
            Sleep(100);
            mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,NULL);
            Sleep(50);
            //cout << mouse_click_pos[5][0] << mouse_click_pos[5][1] << endl;
        }
    }

    SetCursorPos(oldPoint.x, oldPoint.y);
}
void on_mouse( int event, int x, int y, int flags, void* param )
{
    switch(event)
    {
        case CV_EVENT_LBUTTONDOWN:
        {
            //cout << mouse_click_num << endl;
            //cout<<"("<<x<<","<<y<<")"<< endl;
            if(mouse_click_num < 5)
            {
                mouse_click_pos[mouse_click_num%5][0] = x;
                mouse_click_pos[mouse_click_num%5][1] = y;
            }
            else
            {
                mouse_click_pos[5][0] = x;
                mouse_click_pos[5][1] = y;
            }
            mouse_click_num++;
            if(mouse_click_num > 4)
                sim_mouse_click();
            break;
        }
        case CV_EVENT_RBUTTONDOWN:
        {
            POINT oldPoint;
            GetCursorPos(&oldPoint);
            Sleep(100);
            SetCursorPos(-233+516+x,0+192+y);
            Sleep(100);
            mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,NULL);
            Sleep(50);
            mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,NULL);
            Sleep(150);
            SetCursorPos(oldPoint.x, oldPoint.y);
            break;
        }
        break;
    }
}


int main()
{

    while(1)
    {
        keybd_event(VK_LWIN, 0, 0 ,0);
        keybd_event('M', 0, 0 ,0);
        keybd_event('M', 0, KEYEVENTF_KEYUP, 0);
        keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
        HWND prog = FindWindow(NULL, "大家来找茬\0");
        Sleep(100);
        ShowWindow(prog, SW_RESTORE);
        Sleep(100);
        SetWindowPos(prog, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE);
        Sleep(200);
        //HWND prog = GetDesktopWindow();
        RECT pos;
        GetWindowRect( prog, & pos );
        system("nircmd.exe cmdwait 100 savescreenshot shot.png");
        IplImage* img1, *img2, *img3;
        IplImage* greyImage = NULL;
        IplImage* greyImage1 = NULL;

        img1=cvLoadImage("shot.png");
        img2=cvLoadImage("shot.png");

        CvRect rect1 = cvRect(pos.left+7, pos.top+192, 488, 443);
        CvRect rect2 = cvRect(pos.left+516, pos.top+192, 488, 443);
        cvSetImageROI(img1, rect1);
        cvSetImageROI(img2, rect2);


        if(!img1 || !img2){
        printf("Could not load image file\n");
        exit(0);
        }

        img3 = cvCreateImage(cvGetSize(img1),img1->depth,img1->nChannels);
        cvAbsDiff(img1,img2,img3);
        greyImage = cvCreateImage(cvGetSize(img3),8,1);
        cvCvtColor(img3, greyImage, CV_BGR2GRAY);

        greyImage1 = cvCreateImage(cvGetSize(img1),8,1);
        cvCvtColor(img1, greyImage1, CV_BGR2GRAY);

        int height    = greyImage->height;
        int width     = greyImage->width;
        int step      = greyImage->widthStep;
        int channels  = greyImage->nChannels;
        uchar *data      = (uchar *)greyImage->imageData;
        uchar *data1      = (uchar *)greyImage1->imageData;

        for(int i=1;i<height;i++)
            for(int j=3;j<width;j++)
                for(int k=0;k<channels;k++)
                    if(data[i*step+j*channels+k] > 0)
                    {
                        data[i*step+j*channels+k] = 255;
                        //cout << i << " " << j << endl;
                        //SetCursorPos(pos.left+5+j, pos.top+190+i);
                        //mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 );// 按下
                        //Sleep(100);
                        //mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 );//弹起
                        //Sleep(100);
                        //mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 );// 按下
                        //mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 );//弹起
                    }
                    else
                    {
                        data[i*step+j*channels+k] = data1[i*step+j*channels+k]/2;
                    }



        //cvNamedWindow("img1", CV_WINDOW_AUTOSIZE);
        //cvNamedWindow("img2", CV_WINDOW_AUTOSIZE);
        //cvSmooth(greyImage, greyImage, CV_MEDIAN, 3, 0, 0, 0);

        //cvErode(greyImage, greyImage, NULL, 30);

        //CvMemStorage* storage = cvCreateMemStorage(0);
        //CvSeq* contour = 0;
        //cvCanny(greyImage, greyImage, 1, 3, 3);

        //cout << cvFindContours( greyImage, storage, &contour, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_CODE, cvPoint(0, 0));

        cvNamedWindow("img3", CV_WINDOW_AUTOSIZE);
        //cvShowImage("img1", img1 );
        //cvShowImage("img2", img2 );
        cvShowImage("img3", greyImage );

        ShowWindow(prog, SW_RESTORE);
        Sleep(100);
        SetWindowPos(prog, HWND_TOP, -233, 0, 0, 0, SWP_NOSIZE);

        HWND progimg3 = FindWindow(NULL, "img3\0");
        Sleep(100);
        ShowWindow(progimg3, SW_RESTORE);
        Sleep(100);
        SetWindowPos(progimg3, HWND_TOP, 795, 167, 0, 0, SWP_NOSIZE);

        mouse_click_num = 0;
        cvSetMouseCallback("img3", on_mouse, greyImage);

        cvWaitKey(0);
        cvReleaseImage(&img1);
        cvReleaseImage(&img2);
        cvReleaseImage(&img3);
        cvReleaseImage(&greyImage);
        cvReleaseImage(&greyImage1);
        //cvClearMemStorage(storage);
    }


    return 0;
}

 

 

 

==============================

有人问OpenCV+Codeblock on Windows是怎么配置的。

我是参考这篇。

http://opencv.willowgarage.com/wiki/CodeBlocks

OpenCV版本是 OpenCV-2.3.1-win-superpack.exe    2011-08-17    131.1 MB

解压后,在CodeBlock里新建project,build options里3个地方添东西,如下(相对路径绝对路径都可以,看你opencv装在哪个地方了)

search directories的compiler里,注意那个\opencv\build\include一定要添,和上面教程里的不大一样,不添找不到.h头文件

我是32位的机子。lib的话因为在win下,所以用vc10的lib

linker里把lib下的*.lib都选上

最后,在系统path里(我的电脑右键属性里改)添上bin的地址,里面是dll文件,否则可以编译,但是运行时提示找不到dll。

当然,也可以像 http://opencv.willowgarage.com/wiki/CodeBlocks 里第一种方法,用pkg-config和CMake,但是CMake生成dll要很久。。不是很建议。

 

===========================

附一个比较简单的opencv测试sample,使用的时候在目录里放张testp.jpg的图就行

#include <iostream>
#include "cv.h"
#include "highgui.h"
using namespace std;

int main()
{
    IplImage* img = cvLoadImage( "testp.jpg" );
    cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE );
    cvShowImage("Example1", img);
    cvWaitKey(0);
    cvReleaseImage( &img );
    cvDestroyWindow( "Example1" );
    return 0;
}


类别:默认分类||添加到搜藏 |分享到i贴吧|浏览(2092)|评论 (0)
 
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu