2010-04-18 4 views
0

le point de mon code est pour moi d'appuyer sur f1 et il va scanner 500 pixels vers le bas et 500 pixels et les mettre dans un tableau (il faut juste une boîte qui est 500 par 500 de l'écran) puis après que quand je frappe la fin il cliquera seulement sur la couleur noire ou ... ce que je l'ai mis de toute façon il a fait des choses étranges et je ne peux pas trouver pourquoi:ne peut pas trouver quel est le problème avec mon code :(

#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; 
} 

quelqu'un voit ce qui ne va pas avec mon code :( (vous pouvez ajouter les tags)

+6

définissent « trucs bizarre » – Earlz

+0

i seconde earlz, et aussi se demander ce que (le cas échéant) étapes de débogage vous avez essayé? réduire la section problème du code aiderait ... –

+3

'Sommeil (100000000000);' C'est une longue sieste puissante ... –

Répondre

2

Si vous voulez que votre tableau rgb d'avoir 500x500 entrées (numérotées [0] [0] à [499] [ 499]), Vous devrez le déclarer comme COLORREF rgb[500][500];

Aussi, assurez-vous de ne pas essayer d'accéder rgb[a1][a2]a2 == -1

+0

un tableau commence à 0 n'est-ce pas? donc 499 est 500 et aussi si vous regardez mon code quand a1 et a2 sont utilisés pour la première fois ils obtiennent un ++ au début de chaque boucle donc ils vont les pousser jusqu'à 0 avant d'être utilisé ainsi je reçois tous les 500. – blood

+2

@blood - non, ce n'est pas le cas. Lorsque vous spécifiez une taille de tableau de 499 éléments, ils seront numérotés de 0 à 498. Vous devez spécifier 500 éléments pour obtenir 0 à 499. – Ferruccio

+0

o cool xD merci je ne pense pas que ça va le réparer mais = 3 encore tyvm Vous avez également raison sur a2 désolé = 3 – blood

Questions connexes