Ich versuche, eine Auto-Cliker für eine Windows-App zu machen. Es funktioniert gut, aber es ist unglaublich langsam! Ich verwende derzeit die Methode "getPixel", die ein Array jedes Mal neu lädt, wenn es aufgerufen wird.Get Pixel Farbe schnellste Weg?
Hier ist mein aktueller Code:
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);
}
}
}
Also im Grunde, es scannen nur eine Reihe von Pixeln auf dem Bildschirm und startet ein Maus-Ereignis, wenn es eine rote Taste erkennt.
Ich weiß, dass es andere Möglichkeiten gibt, die Pixelfarbe zu erhalten, z. B. bitblt. Aber ich habe einige Nachforschungen angestellt, und ich verstehe nicht, wie ich das machen soll, um ein Farbfeld zu scannen. Ich brauche etwas, das den Bildschirm sehr schnell scannt, um den Knopf zu fangen.
Könnten Sie mir bitte helfen?
Danke.
Wenn Ihr Code aufgerufen wird? im Leerlauf? wenn der Benutzer die Maus bewegt? Es gibt verschiedene Möglichkeiten, eine rote Schaltfläche zu erkennen, z. B. mit FindWindow(). –
BTW, mein Code ist in einer Endlosschleife. Aber ich möchte einen Farb-Catcher verwenden, während ein Offset-Farb-Catcher verwendet wird. Also, wenn ich meinen Code starte, gehe ich einfach in die Schleife und suche nach dem roten Knopf. – Manitoba
Wenn dieser Code in einer Endlosschleife ist, ist das Problem nicht "GetPixel". Es ist die Tatsache, dass Ihre App keine anderen CPU-Zeiten hat. – tenfour