Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Tzdah en 23 Septiembre 2012, 04:25 am



Título: Es Posible hacer un autoclick pixeles?
Publicado por: Tzdah en 23 Septiembre 2012, 04:25 am
Me refiero a yo poner un color hexadecimal y al activar el autoclick se mueva a la posición de ese color.

Saludos


Título: Re: Es Posible hacer un autoclick pixeles?
Publicado por: ~.L.~ en 24 Septiembre 2012, 01:46 am
Hola DEINO, revisa si alguna de estas funciones te sirven:
http://www.ehowenespanol.com/leer-pixeles-cuadros-imagenes-visual-basic-6-como_120126/
http://deepdarkprocess.wordpress.com/2010/09/09/vb6-leer-un-pixel-de-una-imagen/

Con estos mismos, lo que puedes hacer tú es leer los pixeles y el resto queda a cuenta tuya.
Un saludo, ~.L.~


Título: Re: Es Posible hacer un autoclick pixeles?
Publicado por: BlackZeroX en 27 Septiembre 2012, 05:04 am
Me refiero a yo poner un color hexadecimal y al activar el autoclick se mueva a la posición de ese color.

Saludos

Te dire los pasos por que no cuento con vb6...

1.- Debes obtener el descriptor DC (hDC) de la pantalla (se obtiene con una API que se llama mas o menos así: GetDC() ).
2.- Con esto realizado tienes DOS posibilidades para obtener los pixeles:
2.1.-Proceso LENTO (Internamente se convierte en un BITMAP y lo destruye por cada llamada a GetPixel...):
Usar el API GetPixel() (le debes pasar el hDC en su parámetro, que te retorno el API GetDC() +  las coordenadas [X, Y]):
2.2.- Proceso RAPIDO:
Transformar el hDC en un Bitmap y recorrer la sección de datos del color como un array, obviamente teniendo en cuenta el ancho y alto (Equivalentes a el tamaño de la ventana que obtuviste el hDC con GetDC(), si es de la pantalla entonces es equivalente a tu resolución, hay APIS para obtener la resolución...).
Para transformar en un BITMAP debes usar las APIS de la GDI... puedes usar las APIS: CreateCompatibleBitmap()... y obtienes TODOS los bytes de cada color con el API: GetDIBits()... un ejemplo (Esta en C pero no difiere mucho pues solo son llamas a API para obtener un Screenshot de la pantalla):

Lo que esta después de la linea 26 no importa de mucho puesto que en la 26 ya obtienes EL PUNTERO a la sección donde están LOS BYTES en grupos de 3 bytes (cada byte es un color: Red, Green and Blue: RGB, si no mal recuerdo están inversos... BGR... no lo recuerdo bien) este puntero (BitmapData) lo puedes recorrer con CopyMemory() o APIS para el acceso a la memoria...

Código
  1.  
  2. int SaveScreen()
  3. {
  4.   HDC hdc = GetDC(NULL), hdcMem = CreateCompatibleDC (hdc);
  5.   int iWidth = GetDeviceCaps(hdc, HORZRES), iHeight = GetDeviceCaps(hdc, VERTRES), iSaved = SaveDC(hdcMem);
  6.   HBITMAP hBitmap = CreateCompatibleBitmap(hdc, iWidth, iHeight);
  7.   BYTE* BitmapData;
  8.  
  9.   int numBytes = 3 * (iWidth * iHeight);
  10.  
  11.   BitmapData = new BYTE [numBytes];
  12.  
  13.   BITMAPINFOHEADER bmi = {0};
  14.   BITMAPFILEHEADER bmf = {0};
  15.  
  16.   bmi.biSize = sizeof(BITMAPINFOHEADER);
  17.   bmi.biPlanes = 1;
  18.   bmi.biBitCount = 24;
  19.   bmi.biWidth = iWidth;
  20.   bmi.biHeight = iHeight;
  21.  
  22.   SelectObject(hdcMem, hBitmap);
  23.   BitBlt(hdcMem, 0, 0, iWidth, iHeight, hdc, 0, 0, SRCCOPY);
  24.   RestoreDC(hdcMem, iSaved);
  25.  
  26.   GetDIBits(hdc, hBitmap, 0, iHeight, BitmapData, (BITMAPINFO*)&bmi, DIB_RGB_COLORS);
  27.  
  28.   bmf.bfOffBits = sizeof (bmf) + sizeof (bmi);
  29.   bmf.bfSize = bmf.bfOffBits + numBytes;
  30.   bmf.bfType = 0x4D42;
  31.  
  32.   char filename[30];
  33.   sprintf(filename, "%i.bmp", time(NULL)); //saveDirectory is a global variable.
  34.  
  35.   FILE* pFile = fopen(filename, "wb");
  36.   if(pFile == NULL) return 0;
  37.  
  38.   fwrite (&bmf, sizeof (bmf), 1, pFile);
  39.   fwrite (&bmi, sizeof (bmi), 1, pFile);
  40.   fwrite (BitmapData, sizeof (BYTE), numBytes, pFile);
  41.   fclose (pFile);
  42.  
  43.   delete [] BitmapData;
  44.  
  45.   DeleteObject(hBitmap);
  46.   DeleteDC(hdcMem);
  47.   ReleaseDC(NULL, hdc);
  48.  
  49.   return 1;
  50. }
  51.  
  52.  

3.- Recorre la fila de los pixeles por cada columna y obtén el pixel, a continuación compara lo con el color que buscas:

Si quieres los colores RGB de un color... tienes alguna de estas dos funciones:

http://foro.elhacker.net/programacion_visual_basic/recopilacion_de_funciones_con_operaciones_binarias-t329680.0.html;msg1623777#msg1623777

Las funciones te retornar los colores RGB y en base a esto puedes hacer comparaciones de tolerancia de colores mas exactos...

Dulces Lunas!¡.