C++ pixelbot schreiben
-
Ich haben erwähnt ,dass es mein Ziel ist ein solches Programm wie im Link zu sehen zu programmieren.
Ich setze mich jetzt auch nicht hin und erwarte Meilensteine innerhalb paar Tagen?
Ich denke ein paar Monate und kleine Erfolge sollten mir gelingen.Tutorials auf YT schaue ich mir auch an und versucher "step by step" mein Wissen zu erweitern.c++ habe ich genommen ,da dies eine Multi task lang. ist und AutoIt dem leider unterlegen ist ,da keine Multi Task Lang. ist.
Und ich will ein stabiles,performance starkes programm als Endprodukt.
-
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