Отправляет email-рассылки с помощью сервиса Sendsay

Виртуальная домашняя школа

  Все выпуски  

Виртуальная домашняя школа


Виртуальная домашняя школа ВМС


Выпуск ноябрь 1

Перейти на сайт

Программа управление курсором

Давайте напишем программку авто-кликер. Своя программа, своя работа. Конечно можно и скачать уже готовые (таких довольно много) но все же это своя. Своя любимая и хорошая.

Пред история программы в том, что на работе для заполнения элктронного журнала, требуется совершать абсолютно одинаковые действия. Клик сюда, клик туда. Выбор поле1, поле2 и т.д. и так 200-300 записей. Вот пришлось автоматизировать процесс, и заставить работать компьютер на себя. Ушел на обед, работа кипит, ушел домой, работа кипит :)

наша форма:

form1

Работа программ в двух режимах, это режим записи команд и режим выполнения команд.

Напишем пока режим выполнения. Надеюсь, суть программы понятна? Мы сначала задаем комады, это команды управления курсором и клики курсора. После чего происходит выполнение этих команд по управлению курсором. Возможности можно расширять :)

И так кидаем на форму:

Button - 4 штуки
Timer - 2 штуки
sd: TSaveDialog - saveDialog
od: TOpenDialog - openDialog
Shape1: TShape;
Label1: TLabel;
memo1: TMemo;
SpeedButton - 2 шт.

код Button3 (открытие файла команд)

procedure TForm1.Button3Click(Sender: TObject);
const t='Клик БОТ';
begin
if od.Execute then
begin memo1.Lines.LoadFromFile(od.FileName);
form1.Caption:=t+' <'+extractfilename(od.FileName)+'>';
end;
end;

Код Button2 (сохранение команд)

procedure TForm1.Button2Click(Sender: TObject);
begin
if sd.Execute then
begin memo1.Lines.SaveToFile(sd.FileName);
form1.Caption:=form1.Caption+' <'+extractfilename(sd.FileName)+'>';
end;
end;

Код Button1 (выполнить)

procedure TForm1.Button1Click(Sender: TObject);
begin

// проверяем на пустоту команд
if length(memo1.Text)=0 then begin messagedlg('Ошибка!!! Нет команд',mterror,[mbok],0);exit;end;
label1.Caption:='старт!!!';
sleep(200); //исскуственная задержка
shape1.Brush.Color:=clgreen; //зеленый светофор
wk:=true;
work:=true;
readcommand; //чтение команд
timer1.Enabled:=true;
end;

Пишем процедуру readcommand (здесь мы считываем команды и передаем управление)

procedure TForm1.readCommand;
var i:integer;
b:string[1];
s:string;
begin
label1.Caption:='вхожу в цикл' ;
for i:=0 to memo1.Lines.Count-1 do
begin
label1.Caption:='работаю в цикле';
sleep(300);
application.ProcessMessages;
if wk=false then label1.Caption:='остановка';
if wk=false then break ;
s:=memo1.Lines.Strings[i];
b:=s; //вот это и есть команды
if b='m' then command(1,s);
if b='c' then command(2,s);
if b='d' then command(3,s);
if b='p' then command(4,s);
if b='w' then command(5,s);
if b='b' then command(6,s);
if b='r' then command(7,s);
if b='q' then command(8,s);
sleep(400);
end;
work:=false;
end;

Пишем обработчик команд (здесь команды выполняются)

procedure TForm1.command(v: byte;s:string);
var p1,p2,p3:integer;
x,y,i,k,rnd:integer;
xs,ys,sc:string;
mass:array[0..50] of string;
begin
//
application.ProcessMessages;
case v of
1: begin
p1:=pos('(',s);
p2:=pos(',',s);
xs:=copy(s,p1+1,p2-p1-1);
x:=strtoint(xs);

p1:=pos(',',s);
p2:=pos(')',s);
ys:=copy(s,p1+1,p2-p1-1);
y:=strtoint(ys);
move(x,y);
label1.Caption:='перехожу в ('+inttostr(x)+','+inttostr(y)+')';
end;

2: begin sleep(50);click;label1.Caption:='клик мышкой';end;
3: begin sleep(50);dubclick;label1.Caption:='дабл клик мышкой';end;
4: begin sleep(300);label1.Caption:='задержка 300мс';end;
5: begin sleep(800);label1.Caption:='задержка 800мс';end;
6: begin button4.Click;label1.Caption:='остановка';end;
7: begin
k:=0;
for i:=1 to length(s) do
begin
if s[i]='(' then
begin
sc:=copy(s,i+1,(pos(',',s)));
mass[k]:=sc;
inc(k,1);
end;
end;
Randomize;
rnd:=Random(k);
sc:='('+mass[rnd]+')';
p1:=pos('(',sc);
p2:=pos(',',sc);
xs:=copy(sc,p1+1,p2-p1-1);
x:=strtoint(xs);
p1:=pos(',',sc);
p3:=pos(')',sc);
// showmessage(inttostr(p3));
ys:=copy(sc,p1+1,p3-1);
if pos(')',ys)>0 then delete(ys,pos(')',ys),1);

y:=strtoint(ys);
move(x,y);
label1.Caption:='перехожу в ('+inttostr(x)+','+inttostr(y)+')';
end;
8: begin sleep(100);label1.Caption:='задержка 100мс';end;
end;
end;

Три процедуры управления курсором

procedure TForm1.click;
var p:Tpoint;
begin
getcursorpos(p);
mouse_event(MOUSEEVENTF_leftDOWN,p.X,p.Y,0,0);
mouse_event(MOUSEEVENTF_leftUP,p.X,p.Y,0,0);
end;

procedure TForm1.dubclick;
begin
click;
sleep(250);
click;
end;

procedure TForm1.move(x, y: integer);
begin
setcursorpos(x,y);
end;

 

Процедура таймера

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if work=false then begin application.ProcessMessages;work:=true; label1.Caption:='вхожу в цикл';readcommand;end;
sleep(400);
end;

 

Описание переменных:

var
work:boolean;
wk:boolean;

Описание процедур:

procedure move(x,y:integer) ;
procedure click;
procedure dubclick;
procedure readCommand;
procedure command(v:byte;s:string);

Вот и все с первой частью.... А это команды для выполения поставленной задачи

m(x,y) - перемещение курсора в координату
c - клик мышкой
d - двойной клик мышкой
q - пауза в 100ms
p - пауза в 300ms
w - пауза в 800ms
b - остановка
rm(x,y);(x,y) - выбор координаты из списка

вот и готов персональный мышкин бот. далее продолжим вторую часть нашей работы

полная версия на сайте Ноябрь Выпуск 1


В избранное