Cita de: DEINO 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
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 (c, 26) [Seleccionar]
int SaveScreen()
{
HDC hdc = GetDC(NULL), hdcMem = CreateCompatibleDC (hdc);
int iWidth = GetDeviceCaps(hdc, HORZRES), iHeight = GetDeviceCaps(hdc, VERTRES), iSaved = SaveDC(hdcMem);
HBITMAP hBitmap = CreateCompatibleBitmap(hdc, iWidth, iHeight);
BYTE* BitmapData;
int numBytes = 3 * (iWidth * iHeight);
BitmapData = new BYTE [numBytes];
BITMAPINFOHEADER bmi = {0};
BITMAPFILEHEADER bmf = {0};
bmi.biSize = sizeof(BITMAPINFOHEADER);
bmi.biPlanes = 1;
bmi.biBitCount = 24;
bmi.biWidth = iWidth;
bmi.biHeight = iHeight;
SelectObject(hdcMem, hBitmap);
BitBlt(hdcMem, 0, 0, iWidth, iHeight, hdc, 0, 0, SRCCOPY);
RestoreDC(hdcMem, iSaved);
GetDIBits(hdc, hBitmap, 0, iHeight, BitmapData, (BITMAPINFO*)&bmi, DIB_RGB_COLORS);
bmf.bfOffBits = sizeof (bmf) + sizeof (bmi);
bmf.bfSize = bmf.bfOffBits + numBytes;
bmf.bfType = 0x4D42;
char filename[30];
sprintf(filename, "%i.bmp", time(NULL)); //saveDirectory is a global variable.
FILE* pFile = fopen(filename, "wb");
if(pFile == NULL) return 0;
fwrite (&bmf, sizeof (bmf), 1, pFile);
fwrite (&bmi, sizeof (bmi), 1, pFile);
fwrite (BitmapData, sizeof (BYTE), numBytes, pFile);
fclose (pFile);
delete [] BitmapData;
DeleteObject(hBitmap);
DeleteDC(hdcMem);
ReleaseDC(NULL, hdc);
return 1;
}
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!¡.