2010-04-18 35 views
0

我的代码点是我按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; 
} 

人看到有什么错我的代码:( (随意添加标签)

+6

定义“奇怪的东西” – Earlz 2010-04-18 23:21:22

+0

我第二earlz,也想知道什么(如果有的话)你尝试过的调试步骤?缩小问题部分的代码将有助于... – 2010-04-18 23:22:11

+3

'睡眠(100000000000);'这是一个强大的长午睡... – 2010-04-18 23:24:45

回答

2

如果你希望你的rgb阵列具有500×500项(编号为[0] [0]至[499] [ 499] ),你需要将其声明为COLORREF rgb[500][500];

此外,请务必不要尝试访问rgb[a1][a2]其中a2 == -1

+0

数组从0开始不是吗?所以499是500,如果你看看我的代码,当第一次使用a1和a2时,他们会在每个循环的开始处得到一个++,所以它会在它被使用之前将它们推到0,这样我得到所有500. – blood 2010-04-18 23:30:07

+2

@blood - 不,它不是。当你指定一个数组大小为499的元素时,它们将被编号为0到498.你需要指定500个元素来获得0到499. – Ferruccio 2010-04-18 23:34:12

+0

o cool xD谢谢我认为这不会解决它,但= 3仍然tyvm 另外你对a2抱歉= 3 – blood 2010-04-18 23:35:05