не могу найти что не так с моим кодом :( - PullRequest
0 голосов
/ 19 апреля 2010

смысл моего кода в том, чтобы я нажал клавишу f1, и он отсканирует 500 пикселей вниз и 500 пикселей и поместит их в массив (он просто занимает поле размером 500 на 500 экрана). затем после этого, когда я нажму на конец, он будет нажимать только на черный цвет или ... на что я его установил. во всяком случае, он делал странные вещи, и я не могу понять, почему:

#include <iostream>
#include <windows.h>

using namespace std;

COLORREF rgb[499][499];
HDC hDC = GetDC(HWND_DESKTOP);

POINT main_coner;

BYTE rVal;
BYTE gVal;
BYTE bVal;

int red;  
int green;
int blue; 

int ff = 0;

int main()
{
for(;;)
{
    if(GetAsyncKeyState(VK_F1))
    {
        cout << "started";
        int a1 = 0;
        int a2 = 0;

        GetCursorPos(&main_coner);

        int x = main_coner.x;
        int y = main_coner.y;

        for(;;)
        {
            //cout << a1 << "___" << a2 << "\n";
            rgb[a1][a2] = GetPixel(hDC, x, y);
            a1++;
            x++;

            if(x > main_coner.x + 499)
            {
                y++;
                x = main_coner.x;
                a1 = 0;
                a2++;

            }
            if(y > main_coner.y + 499)
            {
                ff = 1;
                break;
            }
        }

        cout << "done";
        break;
    }
    if(ff == 1)
      break;

}

for(;;)
{
        if(GetAsyncKeyState(VK_END))
        {
            GetCursorPos(&main_coner);

            int x = main_coner.x;
            int y = main_coner.y;

            int a1 = -1;
            int a2 = -1;

            for(;;)
            {
                x++;
                a1++;
                rVal = GetRValue(rgb[a1][a2]);
                gVal = GetGValue(rgb[a1][a2]);
                bVal = GetBValue(rgb[a1][a2]);

                red   = (int)rVal;   // get the colors into __int8
                green = (int)gVal;   // get the colors into __int8
                blue  = (int)bVal;   // get the colors into __int8

                if(red == 0 && green == 0 && blue == 0)
                {

                    SetCursorPos(main_coner.x + x, main_coner.y + y);

                    mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                    Sleep(10);
                    mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                    Sleep(100);

                }

                if(x > main_coner.x + 499)
                {
                    a1 = 0;
                    a2++;
                }

                if(y > main_coner.y + 499)
                {
                    Sleep(100000000000);

                    break;
                }
                if(GetAsyncKeyState(VK_CONTROL))
                {
                    Sleep(100000);
                    break;
                }

            }

        }
}

for(;;)
{


    if(GetAsyncKeyState(VK_END))
    {
        break;
    }

}

return 0;
}

кто-нибудь увидит, что не так с моим кодом :( (не стесняйтесь добавлять теги)

1 Ответ

2 голосов
/ 19 апреля 2010

Если вы хотите, чтобы ваш массив rgb имел 500x500 записей (пронумерованных от [0] [0] до [499] [499]), вам нужно объявить его как COLORREF rgb[500][500];

Также убедитесь, что вы не пытаетесь получить доступ к rgb[a1][a2], где a2 == -1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...