PDA

Просмотр полной версии : [Статья] Авто кликер мыши на Delphi 7


Mallobar
03.05.2012, 10:19
Привет всем.

Не давно мне понадобился авто кликер, для одной онлайн игрушки/problem

Я написал себе эту программу, и решил поделиться с вами.

думаю начнем....

Для начала кидаем на форму: 3 Edita, 2 buttona, 3 Timerа, и 1 CheckBox.

Первые 2 Edit'a будут координатоми мыши(X,Y)
3-й Edit - Интервал клика.
1 Button - Старт.
2 Button - Стоп.
CheckBox - Поверх всех окон.

Начинаем кодить:

Timer1:
var
p: TPoint;
begin
GetCursorPos(p);
Edit1.Text:= IntToStr(p.X);
Edit2.Text:= IntToStr(p.Y);
На таймере поставьте "Интервал" - "1".

Timer2:
if getasynckeystate($11)<>0 then begin //Если нажат Ctrl, то ....
Timer1.Enabled:=False;
Timer2.Enabled:=False;

Это у нас будет фиксироваться Timer1, что бы когда программа кликала, мышка не отодвинулась:hd:

Timer3:
Для начала по поставьте в нем настройки: Enabled - False.

var
position: TPoint;
begin
if getasynckeystate($20)<>0 then begin // Если нажат пробел, то перестать кликать
Timer1.Enabled:=True;
Timer2.Enabled:=True;
Timer3.Enabled:=False;
button1.Enabled:=True;
button2.Enabled:=False;
end
else begin
SetCursorPos(StrToInt(Edit1.text),StrToInt(Edit2.t ext));
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

Button1(Тобиш "Начать или Старт"
if Edit3.Text='' then
showmessage('Не заполнено поле "Задержка"!')
else begin
Timer3.Interval:=StrToInt(Edit2.Text);
Timer3.Enabled:=True;
button1.Enabled:=False;
button2.Enabled:=True;

Buton2(Тобиш "Стоп")
Timer3.Enabled:=False;
Timer1.Enabled:=True;
Timer2.Enabled:=True;
button2.Enabled:=False;
button1.Enabled:=True;


CheckBox - Назовем его "Поверх всех окон".
SetWindowPos(Handle, HWND_TOPMOST, Left, Top, Width, Height,
SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE );

Вот и все.

Теперь можно включать авто кликер :hd:

Если кто хочет поставить другие горячие кнопки для "Остановки движения координат" и Остановки таймера, то вот коды:
vk_LButton = $01;
vk_RButton = $02;
vk_Cancel = $03;
vk_MButton = $04; { генерятся только системой вместе с L & RBUTTON }
vk_Back = $08;
vk_Tab = $09;
vk_Clear = $0C;
vk_Return = $0D;
vk_Shift = $10;
vk_Control = $11;
vk_Menu = $12;
vk_Pause = $13;
vk_Capital = $14;
vk_Escape = $1B;
vk_Space = $20;
vk_Prior = $21;
vk_Next = $22;

vk_End = $23;
vk_Home = $24;
vk_Left = $25;
vk_Up = $26;
vk_Right = $27;
vk_Down = $28;
vk_Select = $29;
vk_Print = $2A;
vk_Execute = $2B;
vk_SnapShot = $2C;
{ vk_Copy = $2C не используется клавиатурой }
vk_Insert = $2D;
vk_Delete = $2E;
vk_Help = $2F;
{ vk_A - vk_Z такие же, как и их ASCII-эквиваленты: 'A' - 'Z' }
{ vk_0 - vk_9 такие же, как и их ASCII-эквиваленты: '0' - '9' }

vk_NumPad0 = $60;
vk_NumPad1 = $61;
vk_NumPad2 = $62;
vk_NumPad3 = $63;
vk_NumPad4 = $64;
vk_NumPad5 = $65;
vk_NumPad6 = $66;
vk_NumPad7 = $67;
vk_NumPad8 = $68;
vk_NumPad9 = $69;
vk_Multiply = $6A;
vk_Add = $6B;
vk_Separator = $6C;
vk_Subtract = $6D;
vk_Decimal = $6E;
vk_Divide = $6F;
vk_F1 = $70;
vk_F2 = $71;
vk_F3 = $72;
vk_F4 = $73;
vk_F5 = $74;

vk_F6 = $75;
vk_F7 = $76;
vk_F8 = $77;
vk_F9 = $78;
vk_F10 = $79;
vk_F11 = $7A;
vk_F12 = $7B;
vk_F13 = $7C;
vk_F14 = $7D;
vk_F15 = $7E;
vk_F16 = $7F;
vk_F17 = $80;
vk_F18 = $81;
vk_F19 = $82;
vk_F20 = $83;
vk_F21 = $84;
vk_F22 = $85;
vk_F23 = $86;
vk_F24 = $87;
vk_NumLock = $90;
vk_Scroll =blue>$91;


Вот и все.

Скачать ([Ссылки могут видеть только зарегистрированные и активированные пользователи]) VT ([Ссылки могут видеть только зарегистрированные и активированные пользователи] 7f0df1b6c2498d/analysis/1336025355/)


/nyan

Nike))))
03.05.2012, 11:16
CheckBox - Назовем его "Поверх всех окон".
Лучше тогда вот так:
if CheckBox1.Checked = true then
Form1.FormStyle := fsStayOnTop
else Form1.FormStyle := fsNormal;

Mallobar
03.05.2012, 11:25
Лучше тогда вот так:
if CheckBox1.Checked = true then
Form1.FormStyle := fsStayOnTop
else Form1.FormStyle := fsNormal;

А разница? эффект то тот же/dgs

Nike))))
03.05.2012, 13:08
А разница? эффект то тот же
Код короче))

VeTaL_UA
03.05.2012, 14:52
Хм, реализовывать горячие клавиши через таймер не ок ;)

NebesaBag
05.12.2012, 19:08
Button1(Тобиш "Начать или Старт"
Код:
if Edit3.Text='' then
showmessage('Не заполнено поле "Задержка"!')
else begin
Timer3.Interval:=StrToInt(Edit2.Text);
Timer3.Enabled:=True;
button1.Enabled:=False;
button2.Enabled:=True;
Грубая ошибка.
Timer3.Interval:=StrToInt(Edit2.Text); не верно
Timer3.Interval:=StrToInt(Edit3.Text); верно.
А то сижу и думаю, где же в коде использование Edit3 кроме проверки на пустоту.
И ещё, для простоты лучше делать Timer3.Interval:=(StrToInt(Edit3.Text))*1000;

А вообще спасибо большое, хороший и главное простой код.

metraz
05.12.2012, 21:16
При таком способе за компьютером работать будет невозможно. Подобные вещи стоит делать через хэндлы, и не кликом мыши, а посылкой сообщения приложению.

NebesaBag
06.12.2012, 00:41
При таком способе за компьютером работать будет невозможно. Подобные вещи стоит делать через хэндлы, и не кликом мыши, а посылкой сообщения приложению.

Буду премного благодарен, если сможете тут написать простой исходник автокликера методом который вы описываете.

metraz
13.12.2012, 22:39
Буду премного благодарен, если сможете тут написать простой исходник автокликера методом который вы описываете.

В скайп. Согласен с сообщением выше, лучше работать через потоки, нежели через таймеры.

RifmoGlas
10.02.2013, 16:07
Пожалуйста перезалейте исходник

SНIFТ
05.03.2013, 19:34
Авто кликер мыши на Delphi 7Выполняю всё действия но в главной переменной как всегда ошибки , но и это ещё не всё после 2 кодов в тимере у меня возникает 3 ошибки и последние на 3 тимир вопще нельзя не чего добавить Enabled – False и в чем проблема.?

KiRo_Lajt
05.05.2013, 19:15
Крайне неудобная штука вышла у меня :С Кто знает как сделать не кликами мыши, а через "хэндлы" напишите пожалуйста как!

VeTaL_UA
06.05.2013, 02:10
Кто знает как сделать не кликами мыши, а через "хэндлы" напишите пожалуйста как!
Сударь, вы о чём?

KiRo_Lajt
06.05.2013, 05:36
Сударь, вы о чём?

Простите, и правда... Перечитал и понял - ересь написал :)
Через посылку действий приложению.
//Не туда посмотрел - не то написал :D

VeTaL_UA
06.05.2013, 19:22
Через посылку действий приложению.
По кнопочкам можно клацать отправкой сообщений окну кнопки, да и всё так можно делать, просто надо получить хендл окна под курсором и ему слать (так делают большинство кликеров).

Kotaries
05.06.2013, 14:38
По кнопочкам можно клацать отправкой сообщений окну кнопки, да и всё так можно делать, просто надо получить хендл окна под курсором и ему слать (так делают большинство кликеров).

согласен, через setCursorPos - просто извращение, считай что комп ниалё. Но хендл окна браузера не всегда можно безгеморно обработать, опять же под разные браузеры заточить - уже гемор.


Согласен с сообщением выше, лучше работать через потоки, нежели через таймеры.
Штозабред? Зачем в кликере потоки? Можт еще ассемблерные вставки туда зафигачить, шоб 70лямов кликов в секунду)))