Sto provando a creare un cliker automatico per un'applicazione Windows. Funziona bene, ma è incredibilmente lento! Attualmente sto usando il metodo "getPixel" che ricarica un array ogni volta che viene chiamato.Ottieni il colore più veloce dei pixel?
Ecco il mio codice corrente:
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);
}
}
}
Quindi, fondamentalmente, solo eseguire la scansione di una gamma di pixel dello schermo e avvia un evento del mouse se rileva un pulsante rosso.
So che ci sono altri modi per ottenere il colore del pixel, come bitblt. Ma ho fatto alcune ricerche, e non capisco come dovrei fare, per scansionare un array di colori. Ho bisogno di qualcosa che scansiona lo schermo molto velocemente per prendere il pulsante.
Potrebbe aiutarmi per favore?
Grazie.
Quando viene chiamato il codice? in idle time? quando l'utente muove il mouse? Esistono diversi modi per rilevare un pulsante rosso, ad esempio utilizzando FindWindow(). –
Btw, il mio codice è in un ciclo infinito. Ma voglio usare un collettore di colori mentre uno sfalsato. Quindi, quando avvio il mio codice, basta andare nel ciclo e controllare il pulsante rosso. – Manitoba
Se questo codice è in un ciclo infinito, il problema non è 'GetPixel'. È il fatto che la tua app non consente alle altre app di avere un tempo di CPU. – tenfour