c++ mfc的第二天

获取客户区窗口坐标:

LPPOINT point; //坐标,传给ClientToScreen用的
POINT ptemp;  //用它来初始化point
point = &ptemp;
ptemp.x = 0; ptemp.y = 0;

ClientToScreen(hWnd, point);//获取客户区相对于屏幕的坐标
cout <<"point->x:"<< point->x << endl;
cout <<"point->y:"<< point->y << endl;

参考:https://blog.csdn.net/weixin_37520565/article/details/102546451
https://blog.csdn.net/guolonghui/article/details/6370805

模拟鼠标点击某一坐标

SetCursorPos(620, 910); //设置鼠标坐标到某一位置
//为啥我在mouse event里设置的坐标不好使,只能setcursor???

mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); //鼠标按下,坐标是相对当前位置的
Sleep(459);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
//如果鼠标移到对应位置,但没有点击,使用管理员权限运行就好了

mouse_event第一个参数就是按下或松开左键,第二个第三个是x,y坐标,并且是相对鼠标当前位置而言,但是我测试鼠标并没有相对当前位置移动,所以只好曲线救国,直接SetCursorPos设置鼠标在屏幕上的绝对位置,mouse event里全设为0;
因为上面已经获取客户区的绝对坐标,所以可以用SetCursorPos设置相对客户区的偏移坐标
参考:https://www.cnblogs.com/leafyoung/archive/2007/06/29/799837.html

        //************获取键盘按键*******************
        keybd_event(27, 0, 0, 0);
        keybd_event(27, 0, KEYEVENTF_KEYUP, 0);
        //第一个是虚拟键码。键码值必须在1~254之间。第二个是硬件扫描码,好像有的游戏要用到


        //************获取屏幕颜色*******************
        HDC hdc = ::GetDC(hWnd);
        COLORREF pixel = ::GetPixel(hdc, 720, 160);
        if (pixel != CLR_INVALID) {
            int red = GetRValue(pixel);
            int green = GetGValue(pixel);
            int blue = GetBValue(pixel);
            cout << "R=" << red << ";G=" << green << ";B=" << blue << endl;
        }

参考:https://blog.csdn.net/qq_40757240/article/details/105504524
https://blog.csdn.net/lhrsdl/article/details/52579286

然后开始想办法读取颜色,识别是什么物品
先测试了一下极限,0.3秒大概能读取40次颜色。然后那一个物品宽度大概70像素,移动过去要0.3秒。后来想了想,直接截图方便些。主要是录屏的话,应该是编码问题(bandicam)导致rgb有损失,然后和游戏里的物品RGB对不上了(不过我觉得fraps应该没问题,它是抓取图片吧。还没试)后来在游戏开始时抓取屏幕,然后保存下来就得到一张静态的完整的物品图片,提取RGB就行了。
只是不知道怎么对比比较好,要是把抓取到的RGB和70多个RGB都对比一遍,效率是不是太低。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值