Обычно делается скрин и определяется цвет пикселей функцией,сейчас пример кода привести не могу,пишу с мобилы,дома буду,выложу,хотя в нете много подобных примеров,а вобще зачем тебе что бы мышка прилипала,так то у тебя она к каждому синему пикселю будет липнуть,а их у тебя будет очень много,может тебе определенную область нада?
ищем цвет пикселя например синий если он находится то курсор плавно "прилипает" к нему
Постой... Тебе это нужно на форме твоей программы сделать или чтобы по всему монитору искало синие пиксели? И как ты представляешь себе если сделать заливку на рабочий стол всю синюю? К какому пикселю прилипать?
Поконкретней опиши что именно сделать хочешь.
Случайно не новый чит на Counter-Strike?
Сообщение отредактировал Don_Diego - Воскресенье, 06.05.2012, 01:26
Дата: Воскресенье, 06.05.2012, 09:56 | Сообщение # 5
Постоянный
Группа: Проверенные
Сообщений: 281
Статус: Offline
Don_Diego
Quote (Don_Diego)
Тебе это нужно на форме твоей программы сделать или чтобы по всему монитору искало синие пиксели?
вот вот, у меня тоже возник такой вопрос, представь что будет если ты запустишь прилипание ко всем синим пикселям на экране, это же армагедон для мышки)))
Дата: Воскресенье, 06.05.2012, 10:29 | Сообщение # 6
Администратор
Группа: Администраторы
Сообщений: 888
Статус: Offline
Quote (xXxSh@dowxXx)
вот вот, у меня тоже возник такой вопрос, представь что будет если ты запустишь прилипание ко всем синим пикселям на экране, это же армагедон для мышки)))
Дата: Воскресенье, 06.05.2012, 17:43 | Сообщение # 9
Постоянный
Группа: Проверенные
Сообщений: 281
Статус: Offline
oke да тут собственно не имеет значения какой цвет, хоть серо-буро-малиновый в крапинку, ты пойми что таких пикселей на всем экране в той же заставке на рабочем столе куча, и твоя мышка будет липнуть ко всем подряд, если ты конечно не поставишь себе одноцветную картинку на заставку, ты объясни поподробней может быть тебе нужно работать с какой то левой программой в которой нужно находить такой цвет и что бы мышка тебе на него указала, не обязательно что бы липла, можно и другие варианты решения найти...
Дата: Воскресенье, 06.05.2012, 17:56 | Сообщение # 10
Постоянный
Группа: Пользователи
Сообщений: 86
Статус: Offline
ну чтоб находило в активном окне, желательно бы сделать чтоб к примеру если картинка ближе 5 см то мышка прилипала или указывала а если дальше то не реагировала
Дата: Воскресенье, 06.05.2012, 21:56 | Сообщение # 11
Частый гость
Группа: Пользователи
Сообщений: 68
Статус: Offline
Вот как искать цвет нужного пикселя на мониторе (у меня разрешение 1280х768, такое же в программе). Тормозить будет очень сильно, поэтому такой "метод" лучше запхнуть в отдельный поток. Ну, а как мышку то прилепить к тем координатам думаю поймешь?
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function DesktopColor(const x,y: integer): TColor;
var
c:TCanvas;
begin
c:= TCanvas.Create;
c.Handle:= GetWindowDC(GetDesktopWindow);
result:= GetPixel(c.Handle, x, y);
c.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
x, y: Integer;
begin
y:= 1;
while y <= 768 do
begin
for x:=1 to 1280 do
if DesktopColor(x, y)= 458752 then
//MessageDlg('Наш цвет найден: '+ IntToStr(x)+', '+ IntToStr(y), mtInformation,[mbOK],0);
SetCursorPos(x, y);// ради хохмы установил эту строчку - жесть, прям на вирус какой-то похоже.
y:= y+1;
end;
end;
end.
PS: если таким "способом" делать то что ты хочешь, то лучше задавать очень маленькую область поиска нужного пикселя. Или если например у тебя искомый объект довольно крупный (скажем 50х50 пикселей), то шаг поиска можем увеличить с таким расчетом чтобы мы всегда попадали в нужный объект. Тогда скорость еще более заметно возрастет.
Сообщение отредактировал Don_Diego - Воскресенье, 06.05.2012, 22:28
Дата: Понедельник, 07.05.2012, 07:45 | Сообщение # 12
Постоянный
Группа: Проверенные
Сообщений: 281
Статус: Offline
да..., мне почему то кажется что oke нужно не цвет пикселя, а цвет небольшой, или можно сказать очень маленькой области экрана, точки какой нибудь, тогда другое дело, и код будет работать нормально, потому что если работать с пикселями то даже в одной точке на экране их не так уж и мало
Дата: Понедельник, 07.05.2012, 13:59 | Сообщение # 13
Частый гость
Группа: Пользователи
Сообщений: 68
Статус: Offline
Кстати, навело на мысль... Это же считай наполовину готовый код для того чтобы найти вот такую картинку , навести на нее курсор, сымитировать нажатие кнопок мыши, чтобы в конечном итоге нажало Выход
Дата: Понедельник, 07.05.2012, 18:01 | Сообщение # 14
Постоянный
Группа: Пользователи
Сообщений: 86
Статус: Offline
Quote (Don_Diego)
PS: если таким "способом" делать то что ты хочешь, то лучше задавать очень маленькую область поиска нужного пикселя. Или если например у тебя искомый объект довольно крупный (скажем 50х50 пикселей), то шаг поиска можем увеличить с таким расчетом чтобы мы всегда попадали в нужный объект. Тогда скорость еще более заметно возрастет.
работает ли способ на активном окне в др программе?
Дата: Понедельник, 07.05.2012, 18:06 | Сообщение # 15
Постоянный
Группа: Пользователи
Сообщений: 86
Статус: Offline
Quote (Don_Diego)
Вот как искать цвет нужного пикселя на мониторе (у меня разрешение 1280х768, такое же в программе). Тормозить будет очень сильно, поэтому такой "метод" лучше запхнуть в отдельный поток. Ну, а как мышку то прилепить к тем координатам думаю поймешь?
Don_Diego кстати хорошая мысль была на счет поиска значка антивируса в трее и отключение через "Выход", вот только получится ли быстро это сделать, мне кажется будет много проблем с этим методом:
1. это то что выводятся на экран все действия и мелькания меню антивируса;
2. это то что если пользователь в этот момент что то делает с мышкой, я имею ввиду активно ее передвигает , то координаты могут сбиться.
xXxSh@dowxXx, нету ничего невозможного, пока я человек
Я думал над этими вопросами, и они довольно легко решаются:
1) окошки антивируса (например касперского) выводятся выше значка трея
2) действительно, координаты могут сбиться когда пользователь что-то будет делать мышкой. Но, мы ведь можем ее отключить на время?
Тут проблема чуть более сложная есть: например узнать размер трея, тоесть искомой области. Например на 7 он вверх сильно вытянут, у некоторых может быть влево задвинут до безобразия, у некоторых вообще значки могут быть скрыты за специальной кнопкой... Но и это все решается, чем больше идей напишут - тем более шанс успеха
А чтобы пользователь не сильно нас заподозрил, после запуска такого файла, действия можем начинать скажем, минут через 10... Конечно, убрать стоит автозагрузку и всякие самокопирования.
ну мне кажется что бы не запариваться на выяснение размера трея, можно просто брать за исходное значение поиска определенную область от нижнего правого угла экрана, и уже в ней искать по пиксельно так сказать определением цвета сам значек, тем более что если я не ошибаюсь, значек антивируса всегда на виду в трее, и не прячется в неиспользуемые...
xXxSh@dowxXx, в таком случае тут работы осталось совсем немного. Я конечно не разработчик Fine Reader, но все же только что составил цветовую гамму для значка KIS