如何解决在特定的x,y坐标处获取像素的颜色,然后执行单击
我最近刚接触C ++,基本上是通过观看视频和对他人的代码进行反向工程来学习。不用说,我还不是很好。
无论如何,我正在开发一个程序,该程序检测特定颜色(RGB)是否在另一个窗口中的特定坐标处,如果是,则代码执行一次单击。 这就是我放在一起的东西
#include <windows.h>
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;
void BigClick()
{
INPUT Input = { 0 };
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN; //push
::SendInput(1,&Input,sizeof(INPUT));
::ZeroMemory(&Input,sizeof(INPUT)); //or NULL?
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP; //release
::SendInput(1,sizeof(INPUT));
}
int main()
{
COLORREF colortosearch = RGB(0,255); // color to search
HDC hdcScreen = GetDC(NULL);
int x = 954;
int y = 540;
while (true)
{
if (::GetPixel(hdcScreen,x,y) == colortosearch)
{
// start code to click
cout << "one click completed";
BigClick();
}
}
::ReleaseDC(NULL,hdcScreen);
return 0;
}
该代码可以编译,但是即使整个屏幕为蓝色或RGB(0,255)
也不会单击。我知道BigClick()
的点击次数,因为我已经对其进行了单独测试以确认。我在这里想念什么?我以为我没有给GetPixel
坐标以正确的方式进行检查,但是由于我很新,所以据我所知它可以是任何东西。
解决方法
我更改了固定坐标以跟随光标位置,并且您的程序似乎正常运行。点击也会执行!
int main()
{
COLORREF colortosearch = RGB(0,255); // color to search
HDC hdcScreen = GetDC(NULL);
while (true)
{
POINT cursor;
GetCursorPos(&cursor);
COLORREF color = ::GetPixel(hdcScreen,cursor.x,cursor.y);
if (color == colortosearch) {
// start code to click
cout << "one click completed";
BigClick();
}
else {
int red = GetRValue(color);
int green = GetGValue(color);
int blue = GetBValue(color);
cout << "x: " << cursor.x << ",y:" << cursor.y << " --> ";
cout << "(" << red << "," << green << "," << blue << ")\r\n";
}
}
::ReleaseDC(NULL,hdcScreen);
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。