Estoy tratando de hacer un cliker automático para una aplicación de Windows. Funciona bien, ¡pero es increíblemente lento! Actualmente estoy usando el método "getPixel" que recarga una matriz cada vez que se llama.Obtén color de píxel más rápido?
Aquí está mi código actual:
hdc = GetDC(HWND_DESKTOP);
bx = GetSystemMetrics(SM_CXSCREEN);
by = GetSystemMetrics(SM_CYSCREEN);
start_bx = (bx/2) - (MAX_WIDTH/2);
start_by = (by/2) - (MAX_HEIGHT/2);
end_bx = (bx/2) + (MAX_WIDTH/2);
end_by = (by/2) + (MAX_HEIGHT/2);
for(y=start_by; y<end_by; y+=10)
{
for(x=start_bx; x<end_bx; x+=10)
{
pixel = GetPixel(*hdc, x, y);
if(pixel==RGB(255, 0, 0))
{
SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Sleep(50);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Sleep(25);
}
}
}
Así que, básicamente, sólo se analizan una serie de píxel en la pantalla y se inicia un evento de ratón si detecta un botón rojo.
Sé que hay otras formas de obtener el color de píxel, como bitblt. Pero hice algunas investigaciones, y no entiendo cómo se supone que debo hacer, para escanear un conjunto de colores. Necesito algo que escanee la pantalla muy rápido para atrapar el botón.
¿Podría ayudarme?
Gracias.
¿Cuándo se llama a su código? en tiempo de inactividad? cuando el usuario mueve el mouse? Hay diferentes maneras de detectar un botón rojo, usando FindWindow() por ejemplo. –
Por cierto, mi código está en un bucle infinito. Pero quiero usar un receptor de color mientras que uno de compensación. Entonces, cuando comienzo mi código, simplemente ingresa al ciclo y busca el botón rojo. – Manitoba
Si este código está en un bucle infinito, entonces el problema no es 'GetPixel'. Es el hecho de que su aplicación no permite que otras aplicaciones tengan tiempo de CPU. – tenfour