powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Потоки
25 сообщений из 26, страница 1 из 2
Потоки
    #39952191
yisanog246
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такой вопрос. Сделал простой кликер с перемещением курсора по указанным координатам + кликание по данным координатам. Но появилась такая проблема во время работы, тоесть когда нажимаю кнопку зависает сама форма. Прошерстил интернет и так понял что проблема в том что код нагружает форму и она из за этого виснет. Из чего сделал вывод что надо сделать поток. Но поток не получается сделать. Не понимаю почему все испробовал вообще никак. Не могу как прописать что бы поток выполнял функции кнопки. Или мб это как то по другому должно быть. Надеюсь вот что вы мне подскажите как исправить. Application.ProcessMessages не помог мне.
ну либо пример кода как можно реализовать клик по координатам через поток
...
Рейтинг: 0 / 0
Потоки
    #39952195
Sinemurius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое кликер ?
Что означает "перемещение курсора по указанным координатам" ? Какого курсора ? Курсора мыши ?
Что такое "кликание по указанным координатам" ?
Из чего Вы сделали вывод, что Вам нужен поток ?
Почему Вы решили, что "поток может выполнять функции кнопки" ?
Что означает фраза "как можно реализовать клик по координатам через поток" ?

Иными словами, попробуйте представить, что читатели Вашего поста ничего не знают о том, что Вы хотите сделать и как Вы пытаетесь сделать. Представьте, что они не читали Ваш код.

И после этого напишите все заново.
...
Рейтинг: 0 / 0
Потоки
    #39952197
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поток не поможет. Ищи в каком месте зависает программа.
...
Рейтинг: 0 / 0
Потоки
    #39952199
yisanog246
Такой вопрос. Сделал простой кликер с перемещением курсора по указанным координатам + кликание по данным координатам. Но появилась такая проблема во время работы, тоесть когда нажимаю кнопку зависает сама форма. Прошерстил интернет и так понял что проблема в том что код нагружает форму и она из за этого виснет. Из чего сделал вывод что надо сделать поток. Но поток не получается сделать. Не понимаю почему все испробовал вообще никак. Не могу как прописать что бы поток выполнял функции кнопки. Или мб это как то по другому должно быть. Надеюсь вот что вы мне подскажите как исправить. Application.ProcessMessages не помог мне.
ну либо пример кода как можно реализовать клик по координатам через поток

Если клик один, то даже если форма и зависает - это длиться микросекунды и не должно быть заметно. Думается мне причины тут не в потоке.
...
Рейтинг: 0 / 0
Потоки
    #39952202
yisanog246
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sinemurius, понял) сейчас уточню все вопросы). Автокликер: мне нужно что бы мышка курсора сама передвигалась по координатам которые я указал в коде и делала клик по этим координатам. Для этого я использовал это:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
procedure TForm1.Button1Click(Sender: TObject);
begin
sleep(4500);
setcursorpos(107,556);  // кнопка поиска
mouse_event(mouseeventf_leftdown,0,0,0,0);
mouse_event(mouseeventf_leftup,0,0,0,0);
sleep(4500);
setcursorpos(482,505);  // поиск плитки
mouse_event(mouseeventf_leftdown,0,0,0,0);
mouse_event(mouseeventf_leftup,0,0,0,0);
sleep(4500);
setcursorpos(661,378); // выбрать плитку
mouse_event(mouseeventf_leftdown,0,0,0,0);
mouse_event(mouseeventf_leftup,0,0,0,0);
sleep(4500);
setcursorpos(896,508);  //кнопка сбор
mouse_event(mouseeventf_leftdown,0,0,0,0);
mouse_event(mouseeventf_leftup,0,0,0,0);
sleep(4500);
setcursorpos(938,151); // кнопка новые войска
mouse_event(mouseeventf_leftdown,0,0,0,0);
mouse_event(mouseeventf_leftup,0,0,0,0);
sleep(4500);
setcursorpos(836,611); //на марш
mouse_event(mouseeventf_leftdown,0,0,0,0);
mouse_event(mouseeventf_leftup,0,0,0,0);
sleep(4500);
button1.Click;
end;



Как можно видеть там явно не 1 строчка. После того как жму кнопку на форме которая выполняет эти функции. Форма подвисает пока не выполнит их. А так как нужно что бы эти действия повторялись постоянно( тоесть зацикленно ), то выходит что форма висит просто и не отвечает ни на что. Как понял Я( который понимает не много ), то это связанно с тем что весь процесс происходит в главной форме. Из этого выходит вопрос. Можно ли сделать так что бы эти действия выполнялись в фоновом процессе ( а как я понял это отдельный поток ) что бы не нагружать главную форму, или нет. Если можно был бы очень признателе если бы подсказали примером, или объяснили немного. Книжки читал, видосы и гугл исползовал. Не получается у меня к сожалению. Прошу помощи у вас)
...
Рейтинг: 0 / 0
Потоки
    #39952204
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чо это?!1
...
Рейтинг: 0 / 0
Потоки
    #39952207
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yisanog246,

Форма у вас фризится из-за Sleep'ов. По идее операцию ожидания можно перенести в другой поток, который будет сигнализировать главному, что настало время делать то-то и то-то. Т.е. сделать поток, который крутится бесконечно, в нём реализовать ожидание (Application.ProcessMessages нельзя использовать) и отправку сообщения главной форме, в котором в параметре указать, какой шаг нужно делать. А на главной форме в обработке события реализовать перемещение курсора и клик. Вот примерное направление.
...
Рейтинг: 0 / 0
Потоки
    #39952208
yisanog246
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldmi45,
Понял. Спасибо буду пробовать.
...
Рейтинг: 0 / 0
Потоки
    #39952209
goldmi45
yisanog246,

Форма у вас фризится из-за Sleep'ов. По идее операцию ожидания можно перенести в другой поток, который будет сигнализировать главному, что настало время делать то-то и то-то. Т.е. сделать поток, который крутится бесконечно, в нём реализовать ожидание (Application.ProcessMessages нельзя использовать) и отправку сообщения главной форме, в котором в параметре указать, какой шаг нужно делать. А на главной форме в обработке события реализовать перемещение курсора и клик. Вот примерное направление.

Проще же через таймер сделать? Чем в дебри потоков лезть.
...
Рейтинг: 0 / 0
Потоки
    #39952212
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич,

таймер выполняется в главном потоке. И фриз главной формы не исчезнет.
...
Рейтинг: 0 / 0
Потоки
    #39952213
yisanog246
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Игоревич, если через таймер то надо будет не 1 таймер делать верно? в один же нельзя все прописать?
...
Рейтинг: 0 / 0
Потоки
    #39952215
yisanog246
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldmi45, понял
...
Рейтинг: 0 / 0
Потоки
    #39952216
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yisanog246
Код: pascal
1.
2.
3.
4.
5.
procedure TForm1.Button1Click(Sender: TObject);
begin
sleep(4500);
button1.Click;
end;


Здесь чудесно всё.
...
Рейтинг: 0 / 0
Потоки
    #39952218
yisanog246
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, а вот это не понял)
...
Рейтинг: 0 / 0
Потоки
    #39952229
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yisanog246,

кнопка нажимает сама на себя безусловно - это вечное зависание приложения до переполнения стека.

ЗЫ. Кликер для своего приложения таким способом - пустая трата времени. Кнопки, события и так доступны своему приложению.
Кликер для другого приложения, если эта игра, бесполезен, т.к. в них давно встроены защиты от волшебных перемещений мыши и фокуса.
...
Рейтинг: 0 / 0
Потоки
    #39952231
yisanog246
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, ну не знаю. у меня все работает норм
...
Рейтинг: 0 / 0
Потоки
    #39952234
goldmi45
Андрей Игоревич,
таймер выполняется в главном потоке. И фриз главной формы не исчезнет.

Зависание формы происходит из-за "sleep", который при таймере не нужен.
yisanog246
Андрей Игоревич, если через таймер то надо будет не 1 таймер делать верно? в один же нельзя все прописать?

Можно в несколько, можно в один, но с условием, например счетчик -


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
var
 i:integer;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  case i of
  1: begin
      setcursorpos(107,556);
      mouse_event(mouseeventf_leftdown,0,0,0,0);
      mouse_event(mouseeventf_leftup,0,0,0,0);
     end;
  2: begin
      setcursorpos(482,505); 
      mouse_event(mouseeventf_leftdown,0,0,0,0);
      mouse_event(mouseeventf_leftup,0,0,0,0);
     end;
  3: //ну и так далее

  end;

  Inc(i)

  if i = 10 then i := 1; //ну или сколько там будет максимальное i;
end;


Это всё, конечно, знатный "колхоз".
...
Рейтинг: 0 / 0
Потоки
    #39952245
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич

Это всё, конечно, знатный "колхоз".


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
procedure MouseClick(const AX, AY: Integer) ;
begin
  setcursorpos(AX, AY);

  mouse_event(mouseeventf_leftdown, 0, 0, 0, 0);
  mouse_event(mouseeventf_leftup, 0, 0, 0, 0);
end;

var
  i: Integer;

procedure Timer1Timer(Sender: TObject);
begin
  case i of
    1: MouseClick(107, 556);
    2: MouseClick(482, 505); 
    3: //ну и так далее
  end;

  Inc(i);

  if i = 10 then
    Timer1.Enabled := False;
end;
...
Рейтинг: 0 / 0
Потоки
    #39952264
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
безотносительно всего остального кода в теме, таймер думаю вполне допустим что бы вот в самом деле в доп. поток не лезть и с синхрой не возится и так всяко. только что i лучше сделать полем формы
...
Рейтинг: 0 / 0
Потоки
    #39953503
yisanog246
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  MyThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
    procedure Spat;
  end;

var
  Form1: TForm1;
  TMyThread: MyThread;
implementation

{$R *.dfm}

procedure MyThread.Execute;
begin
sleep(4500);
Synchronize(Spat);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TMyThread:=MyThread.Create(False);
end;

procedure MyThread.Spat;
begin
setcursorpos(107,556);

setcursorpos(482,505);

setcursorpos(661,378);

Setcursorpos(896,508);
end;

end.



Решил через потоки делать. Поток запускается все ок. Но надо делать остановку потока и запускать его снова после каждого передвижения курсора мыши. Не могу разобраться как правильно прописать это : TMyThread.Suspend;
TMyThread.Resume;
Ну и по коду подскажите, а то кажется как то через дебри я поток запускаю. Пробовал с кнопки запустить поток, но не получается.
...
Рейтинг: 0 / 0
Потоки
    #39953504
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, отличный пример как делать не надо.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Потоки
    #39953508
yisanog246
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
Даже спорить не буду) А как лучше подскажите пожалуйста
...
Рейтинг: 0 / 0
Потоки
    #39953560
yisanog246
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят подскажите?
...
Рейтинг: 0 / 0
Потоки
    #39953562
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Воспользоваться TTimer.
...
Рейтинг: 0 / 0
Потоки
    #39953702
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yisanog246
Ребят подскажите?

Вам уже подсказали: 22124011 , только переменную i описать как поле формы, а не глобально.
И положить на форму таймер с интервалом 4500.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Потоки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]