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


Anmelden zum Antworten