?
Naja dann mach das so,
Hier wird in OnPaint nach einem Client Wnd gesucht, und das wird dann
Pixelig untersucht: wird gesuchtes gefunden sendet es einen
Hardcore MouseEvent und Key press, daraus kannst Du das alles herleiten:
(Damit fuhr ein "Wot" -Panzer die ganze Nacht ^^)
Pseudoverbrechen:
COLORREF TestRegion(int x, int y,int w, int h,int linew, void *pbBits)
{
RGBTRIPLE *pRgb = (RGBTRIPLE *)pbBits;
DWORD red(0),green(0),blue(0);
for( int yy = y; yy < y+h; yy++ )
{
for( int xx = x; xx < x+w; xx++ )
{
red += pRgb[xx].rgbtRed;
green += pRgb[xx].rgbtGreen;
blue += pRgb[xx].rgbtBlue;
}
pRgb = (RGBTRIPLE *)((LPBYTE)pRgb + (sizeof(RGBTRIPLE) * linew));
}
return RGB(red/(h*w),green/(h*w),blue/(h*w));
}
void CWotBotDlg::OnPaint()
{
CPaintDC dc(this);
CWnd* pClientWnd=(FindWindow("App","WoT-Client"));
if(!pClientWnd) return;
CDC* pDC(pClientWnd->GetWindowDC());
CRect rcClient;pClientWnd->GetClientRect(&rcClient);
CRect rc;GetClientRect(&rc);
int th = ::GetSystemMetrics(SM_CYCAPTION); //titelbar
int mh = ::GetSystemMetrics(SM_CYMENU); //menubar
int bw = ::GetSystemMetrics(SM_CXFIXEDFRAME)<<1;//border
int nWidth = rc.Width();//GetSystemMetrics(SM_CXFULLSCREEN);
int nHeight = rc.Height();//GetSystemMetrics(SM_CYFULLSCREEN);
HDC hdcMem = ::CreateCompatibleDC(pDC->m_hDC);
HBITMAP hbm = ::CreateCompatibleBitmap(pDC->m_hDC, nWidth, nHeight);
HBITMAP hbmOld = (HBITMAP)::SelectObject(hdcMem, hbm);
::SetStretchBltMode(dc.m_hDC,STRETCH_DELETESCANS);//stretch with highquality
::StretchBlt(/*m_dib.GetDC()*/dc.m_hDC, 0,0, rc.Width(), rc.Height(),pDC->m_hDC , bw, th+bw,rcClient.Width()-bw,rcClient.Height(),SRCCOPY);
//BitBlt(hdcMem, 0, 0, nWidth, nHeight, pDC->m_hDC, 0, 0, SRCCOPY);
::SetStretchBltMode(hdcMem,STRETCH_DELETESCANS);//stretch with highquality
::StretchBlt(hdcMem, 0,0, rc.Width(), rc.Height(),pDC->m_hDC , bw, th+bw,rcClient.Width()-bw,rcClient.Height(),SRCCOPY);
BITMAPINFO bmi;ZeroMemory(&bmi, sizeof(bmi));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = nWidth;
bmi.bmiHeader.biHeight = -nHeight;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = nWidth * nHeight * 3;
BYTE *pbBits = new BYTE[bmi.bmiHeader.biSizeImage];
::GetDIBits( hdcMem, hbm,0,abs(bmi.bmiHeader.biHeight),pbBits,&bmi,DIB_RGB_COLORS );
BYTE red1;
BYTE green1;
BYTE blue1;
COLORREF rgb = TestRegion(266, 17, 96 ,22, nWidth, pbBits);
//garage
red1 = GetRValue(rgb);
green1 = GetGValue(rgb);
blue1 = GetBValue(rgb);
TRACE("(A) %d:%d:%d\r\n",red1,green1,blue1);
/*
//hier primitiv wird ein Mouse/Key event systemweit gesendet
//um eine Usereingabe zu simulieren wenn bestimmte Farben gefunden werden
if(red1 > 77 && red1 < 83 && green1 > 33 && green1 < 41 && blue1 > 22 && blue1 < 29 && g_state == 0)//oben ja
{
int x(511),y(76);
SetCursorPos(x,y);Sleep(10);
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);Sleep(10);
mouse_event(MOUSEEVENTF_LEFTUP,x,y,0,0);Sleep(10);
keybd_event(VK_ESCAPE ,0x041,0 , 0);
g_state = 1;
}
*/
//CString str; str.Format("%d.bmp",n++);
//m_dib.Save(str.GetBuffer(),pbBits);//dc.SelectObject(pOldBmp);
delete [] pbBits;
::SelectObject(hdcMem, hbmOld);
::ReleaseDC(0, pDC->m_hDC);
::ReleaseDC(0, hdcMem);
}
Viel Spass damit
Gruß
Karsten