Napisałem sobie bota w MFC visual studio do pewnej gry i mam taki oto kod:
Funkcja getPixel poprawnie działała w windowsie xp, a przestała dzialać pod windows 7:
zapodam tutaj fragmenty kodów z róznych funkcji porgramu które współdziałają ze sobą:
\
CDC *dc;
//tutaj odwołuję się do ekranu pulpitu (całego ekranu monitora):
HWND wnd = ::GetDesktopWindow();
HDC hdc = ::GetWindowDC(wnd);
dc->Attach(hdc);
memDC.CreateCompatibleDC(dc);
//po wykonaniu takich operacji(zamknięciu i ponownym otwarciu pewnego okna explorera):
// TEXT("xxx")- co by nie zdradzać do jakiej gry jest ten bot.. otwarcie i zamkniecie działa poprawnie..
HWND hwnd = FindWindow(TEXT("IEFrame"), TEXT("xxx")); SendMessage(hwnd,WM_CLOSE,NULL,NULL);
Sleep(3500);
/* //kod bez znaczenia- odpowiada za klikniecie w odpowiednie miejsce by ponownie otworzyc okno gry
ImageSearch(uniwersalList,0,0,screenWIDTH,screenHEIGHT,startGamePicture,1,1,1);
uShort tmpx=0,tmpy=0;
uniwersalList->next(&tmpx,&tmpy);
mouseClick(tmpx+startGamePicture->Width/2,tmpy+startGamePicture->Height/2,false);
*/
Sleep(1000);
hwnd = FindWindow(TEXT("IEFrame"), TEXT("xxx"));
ShowWindow(hwnd,SW_SHOWMAXIMIZED);
//w taki sposób robie screena fragmentu ekranu do tablicy bmpBuffer:
memDC.BitBlt(start_i, start_j, end_i-start_i, end_j-start_j,dc, start_i, start_j, SRCCOPY);
DWORD dwvalue=memDC.GetCurrentBitmap()->GetBitmapBits(screenWIDTH*end_j*(bitDepth16?2:4),bmpBuffer);
// i,j - jakieś konkretne współrzędne ekranu..
// a tak pobieram pixele - odwołując się do tej samej zmiennej "dc" co funkcja BitBlt
//dc->GetPixel(i,j)
w windowsie xp wszytko działa poprawnie natomiast w windowsie 7 po zamknięciu i ponownym otwarciu okna przeglądarki funkcje do pobierania screenów z ekranu działają poprawnie a funkcja GetPixel zwraca czarne tło - czarne pixele tak jakby nic nie było..
nie wiem czy problem leży w tym że na xp-ku program kompilowałem pod visual studio 2008 a pod windowsem 7 w visual studio 2010