Я пытался написать этот короткий небрежный код, чтобы сыграть для меня в игру на моем экране, но он не отвечает, как я ожидал.
Заподозрив, что это может быть что-то, связанное с моим окном, я попытался позволить ему посмотреть вместо этого на mspaint, и у него не было никакой реакции.
Программа набирает 7 баллов за наблюдение, и вы нажимаете клавишу shift, чтобы начать. Затем он должен щелкнуть любые пиксели рядом с цветом, который у меня есть в комментариях там над материалом RGB. Я пытался ослабить эти диапазоны, но заметил, что он щелкнул чем-то не того цвета.
Когда я проследил значения цветов, которые он получал, я заметил, что многие из них были черными, что странно, потому что в переднем окне нет черных пикселей.
(я использую windows7, если это что-то значит)
Может кто-нибудь помочь мне понять, что происходит не так?
#include <iostream>
#include <Windows.h>
using namespace std;
void ClickAt(int x,int y){
SetCursorPos( x, y );
Sleep(10);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
Sleep(10);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
Sleep(10);
}
int absDist(int a,int b)
{
int diff = a - b;
if( diff<0 ) diff*=-1;
return diff;
}
LPPOINT mouse;
POINT testPoints[7];
int main()
{
mouse = new POINT;
BYTE state=FALSE;
BYTE prevState=FALSE;
cout<< "Hello, let\'s get ready to play the game.\n";
cout<< "Please provide your click-points by clicking them now.\n";
int clicksFound = 0;
while(true){
state = (bool)GetAsyncKeyState(VK_LBUTTON);
if(state!=prevState){
prevState=(bool)state;
if((bool)state != 0){
// a click happened
GetCursorPos(mouse);
testPoints[clicksFound].x = mouse->x;
testPoints[clicksFound].y = mouse->y;
}else{
clicksFound++;
if( clicksFound>=7 )
break;
}
}
}
cout<< "\aGreat! Now press shift when you\'re ready to start.\n";
cout<< "(You\'ll press space to quit.)\n";
while(true)
{
if( (bool)GetAsyncKeyState(VK_SHIFT) )
break;
}
cout<< "\aNow playing the game.\n";
COLORREF myPixel;
int r,g,b;
while(true)
{
HDC scrn = GetDC(NULL);
// R 225
// G 141
// B 35
for(int i=0;i<7;i++)
{
myPixel = GetPixel(scrn,testPoints[i].x,testPoints[i].y);
if( myPixel==CLR_INVALID )
cout<< "invalid\n";
r = GetRValue(myPixel);
g = GetGValue(myPixel);
b = GetBValue(myPixel);
if( absDist(r,225)<20 && absDist(g,141)<20 && absDist(b,35)<20 )
{
cout<< "click\n";
ClickAt(testPoints[i].x,testPoints[i].y);
}
}
Sleep(20);
if( (bool)GetAsyncKeyState(VK_SPACE) )
break;
ReleaseDC(NULL,scrn);
}
cout<< "\aThank you for playing the game.\n";
system("pause");
return 0;
}