Было когда-то предложение внедрения такой функции
http://crapware.aidf.org/forum/index.php?topic=2390.msg14945#msg14945Попробовал написать DLL с данным функционалом, немного потестил, вроде работает.
Код делфи dll
library if_not_pixel;
uses Windows, System.Types, System.IOUtils;
//------------------------------------------------------------------------------
// Основное тело функции, идет на экспорт, вызывается из кликера
function execute( _mas: pInteger; _size: Integer): Integer; export; stdcall;
type
pIntArr = array[0..0] of Integer;
var
file_arr: TArray<System.Byte>;
a, b, c, pixel, res :Integer;
begin
res := 16777216; // если не найдет других цветов
file_arr := TFile.ReadAllBytes('screen.bmp'); // помещаем файл в массив
b := file_arr[10]; //начало пикс данных
for a:= 0 to _size-1 do //цикл по входным цветам
begin
pixel := pIntArr(_mas^)[a];
While(b < Length(file_arr)) do // цикл сравнения пикселей в файле с входными
begin
if (file_arr[b+2]+file_arr[b+1]*256+file_arr[b]*65536) <> pixel then //если не равен
begin
for c:= 0 to _size-1 do //то сравниваем его с всеми входными
begin
if (file_arr[b+2]+file_arr[b+1]*256+file_arr[b]*65536) = pIntArr(_mas^)[c]
then break
end;
if c = _size then res := file_arr[b+2]+file_arr[b+1]*256+file_arr[b]*65536 //если ни с каким из входящих не совпало
end;
// то выход
if res < 16777216 then break ;
inc(b, 4)
end;
//то выход
if res < 16777216 then break ;
end;
result := res;
end;
//------------------------------------------------------------------------------
// список экспорта
exports execute;
begin
// тело пусто
end.
На выходе получаем цвет не совпавший с отправленными в длл цветами. Если таких нет, то в ответ "16777216". Определять координату этого пикселя в длл не стал, много мороки.
Далее, если найден такой пиксель, ищем его стандартным ифпиксельин-ом.
Пример использования в кликермане:
$x1 = 100 //область сканирования
$y1 = 100
$x2 = 300
$y2 = 300
GETSCREEN($x1,$y1, $x2,$y2)
SCREENSHOTFIX($x1,$y1, $x2,$y2, "screen.bmp") //имя файла обязательно такое
CALL("if_not_pixel.dll", 16777215, 0, 255) // ищем в файле все цвета не совпадающие с белым, черным и красным. Можно добавить нужные цвета (неограниченно)
//print($_return1) //можно глянуть что там за он
IF($_return1 < 16777216) //если нашли несовпадение
//ищем этот пиксель кликерманом
IF_PIXEL_IN($x1,$y1, $x2,$y2, $_return1)
//действие
LCLICK($_return1, $_return2)
WAITMS(100)
END_IF
END_IF
halt
Работает давольно быстро, скорость не мерял. Скомпилированный "if_not_pixel.dll" для х32 битной версии кликермана
во вложении... чето с ноута не хочет вложения работать
. Файл на ядиске
https://yadi.sk/d/GCwF_xHK1Z0BZQ