Parapet |
» 2014-10-15 15:29:16 Może na wątkach to zrobisz? Jeden wątek będzie przeszukiwał np. 25x25px. |
|
stryku |
» 2014-10-15 15:58:49 Wątki nic do szybkości nie dadzą bo one też wykonują się sekwencyjnie. Na różnych procesach by dało, albo openMP użyć to łatwiej by było, ale tak jak napisała Monika90 będzie chyba łatwiej.
@GGG205 A nie chcesz się pobawić z pamięcią? :) Na jaki OS to gra? |
|
GGG205 Temat założony przez niniejszego użytkownika |
» 2014-10-15 16:49:30 Jest to gra mmorpg na neta(Fakt było by prościej użyć cUrla) jest to margonem. Jeżeli chodzi o pamięć, to jakoś nie mam pojęcia o tym(jedyne co kiedyś z nią robiłem to korzystałem z Cheat Engine i edytowałem jej wartość). Jak napisałaś @Monia90 poszukałem trochę i co znalazłem: HDC hdc, hdcTemp; RECT rect; BYTE * bitPointer; int x, y; int red, green, blue, alpha;
while( true ) { hdc = GetDC( HWND_DESKTOP ); GetWindowRect( hWND_Desktop, & rect ); int MAX_WIDTH = rect.right; int MAX_HEIGHT = rect.bottom; hdcTemp = CreateCompatibleDC( hdc ); BITMAPINFO bitmap; bitmap.bmiHeader.biSize = sizeof( bitmap.bmiHeader ); bitmap.bmiHeader.biWidth = MAX_WIDTH; bitmap.bmiHeader.biHeight = MAX_HEIGHT; bitmap.bmiHeader.biPlanes = 1; bitmap.bmiHeader.biBitCount = 32; bitmap.bmiHeader.biCompression = BI_RGB; bitmap.bmiHeader.biSizeImage = MAX_WIDTH * 4 * MAX_HEIGHT; bitmap.bmiHeader.biClrUsed = 0; bitmap.bmiHeader.biClrImportant = 0; HBITMAP hBitmap2 = CreateDIBSection( hdcTemp, & bitmap, DIB_RGB_COLORS,( void ** )( & bitPointer ), NULL, NULL ); SelectObject( hdcTemp, hBitmap2 ); BitBlt( hdcTemp, 0, 0, MAX_WIDTH, MAX_HEIGHT, hdc, 0, 0, SRCCOPY ); for( int i = 0; i <( MAX_WIDTH * 4 * MAX_HEIGHT ); i += 4 ) { red =( int ) bitPointer[ i ]; green =( int ) bitPointer[ i + 1 ]; blue =( int ) bitPointer[ i + 2 ]; alpha =( int ) bitPointer[ i + 3 ]; x = i /( 4 * MAX_HEIGHT ); y = i /( 4 * MAX_WIDTH ); if( red == 255 && green == 0 && blue == 0 ) { SetCursorPos( x, y ); mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 ); Sleep( 50 ); mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ); Sleep( 25 ); } } } Oraz coś do C# https://www.youtube.com/watch?v=gEgxZrXPnzc. |
|
stryku |
» 2014-10-15 17:00:38 Nie no jak przez neta to z pamięcią nie da się |
|
GGG205 Temat założony przez niniejszego użytkownika |
» 2014-10-16 23:19:55 Stanąłem na tworzeniu bitmapy w pamięci i mam błąd: Czy jest on spowodowany tym, że HDC ma w GetDC(0), lub może wartości RGB są puste ? http://ifotos.pl/zobacz/Beztytuup_eqqqnps.png/ HDC screen = GetDC( 0 );
BYTE * bmpPoint;
BITMAPINFO ScreenBmp; ScreenBmp.bmiHeader.biHeight = 640; ScreenBmp.bmiHeader.biHeight = 524; ScreenBmp.bmiHeader.biSize = sizeof( BITMAPINFOHEADER ); ScreenBmp.bmiHeader.biPlanes = 1; ScreenBmp.bmiHeader.biBitCount = 32; ScreenBmp.bmiHeader.biCompression = BI_RGB; ScreenBmp.bmiHeader.biClrUsed = 0; ScreenBmp.bmiHeader.biClrImportant = 0;
HBITMAP Imag = CreateDIBSection( screen, & ScreenBmp, DIB_RGB_COLORS,( void ** ) bmpPoint, NULL, NULL ); W ogóle może ktoś mi wytłumaczyć "Wskaźnik zmiennej, która odbiera wskaźnik położenia wartości bitowych DIB" - to znaczy, że sam pobierze bit z obrazka ? Zaczyna mi się wszystko mieszać ;/ @EDIT Wpadłem na inne rozwiązanie zrobienie bota i działa. Zmniejszyłem rozmiary do jak najmniejszych(637px,526px), następnie jest przycisk skanowanie i wyszukuje pixele potworów, w pętli szuka pixeli co 5(np: i * 5), jeśli znajdzie zapisuje x i y. Następnie po tych danych z łatwością odnajduje pixel(mouse_event), ale jeśli nie znajdzie to od nowa szuka. Myślę, że to dobre rozwiązanie ponieważ w margonem potwory nie ruszają się. Jedynie co może spowodować ponowne skanowanie to przesunięcie okna. |
|
1 « 2 » |