2010-04-18 57 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