C++ pixelbot schreiben
-
Meine oder die von kingaze?
Meine is ca. 20 Jahre C++, davon > 15 Jahre professionell.
Dazu noch diverse Assembler (früher, schon ewig nimmer angegriffen), natürlich C (auch schon ewig nimmer angegriffen) und seit > 5 Jahren auch immer mehr C#.
-
die von kingaze natürlich... deine kann man bei über 20.000 Beiträgen ein wenig besser einschätzen
-
Ach so
War (mir) nur nicht klar weil direkt unter meinem Beitrag und ohne @ - da ist nicht unüblich anzunehmen dass es an mich gerichtet ist.
-
Meine Erfahrung(en) noch ein Anfänger.
Danke für die Zahlreichen Links,alle natürlich angeschaut und versucht so gut wie möglich zu verstehen mit meinem Wissensstand.
Hier mal ein kleines 3minütiges Video was mein ungefähres Ziel ist.
https://www.youtube.com/watch?v=C0JXrCTy6pc
Der wurde in AutoIt geschrieben.
Ich versuche mal diesen hustbaer zu ingorieren.
-
Du hast nichts von dem was ich dir vermitteln wollte verstanden.
@dfsdfsfs
Du weisst schon was passiert wenn man jmd. schreibt dass er sich nicht erwarten soll dass ihn jmd. bei der Hand nimmt ... und ihn dann gleich darauf bei der Hand nimmt?
-
@dfsdfsfs
Du weisst schon was passiert wenn man jmd. schreibt dass er sich nicht erwarten soll dass ihn jmd. bei der Hand nimmt ... und ihn dann gleich darauf bei der Hand nimmt?naja, ich hab ihm ein paar Links gegeben, damit er überhaupt mal weiß nach welchen Begriffen er in Google suchen muss.
Wirklich lernen muss er es selbst, da ists dann komplett aus mit dem HändchenhaltenWobei ich immer skeptisch bin wenn jemand gleich sowas großes vorhat. Ich hatte anfangs Spaß daran meine kleinen Hello World Programme immer weiter auszubauen, aber auch zu analysieren, was welche Zeile nun tatsächlich tut.
Dinge wie WinAPI, OpenCV oder ähnliches hab ich erst viel später gelernt. Ich wäre anfangs auch überfordert gewesen. Da müssen einfach die Basics sitzen. Da hantiert man ganz selbstverständlich mit Datenstrukturen wie Bäumen oder ähnlichem. Kein Problem wenn man die Basics kennt. Kann aber zum Scheitern führen wenn man nicht weiß, wie man damit umzugehen hat.
-
kingaze schrieb:
Meine Erfahrung(en) noch ein Anfänger.
Ich hoffe dir ist klar, dass ein Anfänger niemals so ein Programm auf die Beine stellen kann. Du solltest dich erst mal mit MFC an sich befassen und ein bisschen spielen. Danach mit den WinAPIs usw...
kingaze schrieb:
Ich versuche mal diesen hustbaer zu ingorieren.
Ich hoffe dir ist auch klar, dass dieser hustbaer es eigentlich nur gut meint?!
-
Hi,
da nimmst Du AutoIt, man muss nicht alles neu erfinden, dort kannst Du Pixel aus den verschiedneen Sourfaces dx/Gl usw. abrufen:
http://de.wikipedia.org/wiki/AutoIt
Gruß Karsten
-
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