Tôi đang cố gắng tạo tự động cho một ứng dụng cửa sổ. Nó hoạt động tốt, nhưng nó rất chậm! Tôi hiện đang sử dụng phương thức "getPixel" để tải lại một mảng mọi lúc được gọi.Nhận màu Pixel nhanh nhất?
Đây là mã hiện tại của tôi:
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);
}
}
}
Vì vậy, về cơ bản, nó chỉ quét một loạt các điểm ảnh trên màn hình và bắt đầu một sự kiện chuột nếu nó phát hiện một nút màu đỏ.
Tôi biết có nhiều cách khác để có được màu pixel, chẳng hạn như bitblt. Nhưng tôi đã thực hiện một số nghiên cứu, và tôi không hiểu làm thế nào tôi phải làm, để quét một mảng màu. Tôi cần cái gì đó quét màn hình rất nhanh để nắm bắt các nút.
Bạn có thể giúp tôi không?
Cảm ơn.
Khi mã của bạn được gọi? trong thời gian nhàn rỗi? khi người dùng di chuyển chuột? Có nhiều cách khác nhau để phát hiện một nút màu đỏ, sử dụng FindWindow() chẳng hạn. –
Btw, mã của tôi nằm trong vòng lặp vô hạn. Nhưng tôi muốn sử dụng một màu bắt trong khi một bù đắp một. Vì vậy, khi tôi bắt đầu mã của tôi, nó chỉ đi vào vòng lặp và kiểm tra nút màu đỏ. – Manitoba
Nếu mã này nằm trong vòng lặp vô hạn thì vấn đề không phải là 'GetPixel'. Thực tế là ứng dụng của bạn không cho phép các ứng dụng khác có bất kỳ thời gian CPU nào. – tenfour