Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/51: Рейтинг темы: голосов - 51, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 20.10.2009
Сообщений: 25
1

имитация мышки?

21.10.2009, 12:59. Показов 9696. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
ктото может знает как сделать так чтобы мышшь сама выполняла действия при этом курсор мышки не двигался или был свободным...

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

Добавлено через 58 секунд
функция mouse_event тут совсем некатит так как она требует мышку
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.10.2009, 12:59
Ответы с готовыми решениями:

Имитация клика мышки
Здравствуйте! Подскажите, как возможно реализовать программу, которая будет имитировать клик мышки...

Имитация нажатия мышки
Посмотрел темы, в большинстве только о том как снять координаты или имитировать нажатия в...

Имитация пульса
Всем хай. Знаете, у медиков в больницах стоят штуковины, отслеживающие пульс. И там идет график...

Имитация клавиатуры
У меня такая задача сложилась. Необходимо программно ввести в поле под курсором некоторые символы,...

6
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
21.10.2009, 17:06 2
зачем же так усложнять
Есть же у каждой кнопки событие click...
Delphi
1
2
3
4
5
6
procedure click;
begin
  Button1.Click;
  Button2.Click;
  Button3.Click;
end;
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
21.10.2009, 19:32 3
Автор имеет в виду кнопки в окне браузера (Интернет Эксплорер, например). Button1.Click - здесь нипричём.
Для реализации этой задачи можно действовать, примерно так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//Процедура, которая эмулирует щелчёк (нажатие + отжатие) левой кнопки мыши
//по координатам (X;Y). Координаты (X;Y) - это локальные координаты целевого окна.
//aHWindow - хэндлер целевого окна.
procedure ClickByWindow(aHWindow : HWND; aX : Word; aY : Word);
var
  //Координаты мыши.
  //В двух младших байтах должна быть записана координата X.
  //В двух старших байтах должна быть записана координата Y.
  Coordinates : Longword;
begin
  Coordinates := 0;
  Coordinates := aX or (aY shl 16);
  //Эмуляция нажатия левой кнопки мыши.
  SendMessage(aHWindow, WM_LBUTTONDOWN, MK_LBUTTON, Coordinates);
  //Эмуляция отжатия левой кнопки мыши.
  SendMessage(aHWindow, WM_LBUTTONUP, MK_LBUTTON, Coordinates);
end;
1
0 / 0 / 0
Регистрация: 20.10.2009
Сообщений: 25
21.10.2009, 21:48  [ТС] 4
немножко несовсем понятно...
пробовал по разному както не получается...
где по точнее указывать координаты...
и как сделать чтоб действие было по нажатию кнопки...
а там сам домучаюсь...
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
21.10.2009, 21:59 5
Нужно знать относительные (в пределах целевого окна) координаты кнопки. Это должны быть координаты точки, которая расположена на изображении кнопки в окне браузера. И эти координаты надо передать в процедуру ClickByWindow(). ClickByWindow() выполнит эмуляцию щелчка левой кнопки мыши по этой конопке.
Как определить координаты кнопки - это отдельная история. Можно определять даже по скриншоту целевого окна, зная разрешение экрана - почти "на глазок".
Если хочешь действовать через OLE-управление браузером - здесь надо действовать по другому. - Следует вызывать методы OLE-сервера (браузера), чтобы "добраться" до нужных кнопок.
---
Ещё про ClickByWindow() - хэндлер целевого окна через EnumWindow() можно получить.
0
0 / 0 / 0
Регистрация: 20.10.2009
Сообщений: 25
22.10.2009, 00:34  [ТС] 6
блин у мя точно в голове опилки!

Delphi
1
2
3
4
procedure TForm1.Button6Click(Sender: TObject);
begin
ClickByWindow (416,156);<---------- ругается на это
end;
я точно все неправильно делаю...
или как я думаю над еще хендлер окна отрыть?
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
22.10.2009, 11:39 7
Я посмотрел - там всё несколько сложнее... Надо повозиться. Когда мы пытаемся слать сообщения главному окну приложения - это может не оказать никакого действия на его дочерние окна (компоненты) - например на кнопки, которые расположены в окне. Чтобы оказать воздействие на нужный компонент возможно понадобится слать сообщения непосредственно окну этого компонента. Например, что касается элементов управления типа "Edit" (не Делфи), то чтобы воздействовать на него, надо слать сообщения непосредственно его окну. Кнопки - возможно достаточно слать сообщения их родительскому окну - например для ИЕ 7, 8, возможно, сработает отправка сообщений окну закладки.
Конкретику по сети тебе придётся искать.
Ниже пример: ищем главное окно ИЕ 7 или 8, затем находим окно закладки (это дочернее окно):
Delphi
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
 
    procedure ClickByWindow(aHWindow : HWND; aX : Word; aY : Word);
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
 
//Хэндлер - это системный идентификатор ресурса. По формату совтместим с типом Longword.
 
//Процедура, которая эмулирует щелчёк (нажатие + отжатие) левой кнопки мыши
//по координатам (X;Y). Координаты (X;Y) - это локальные координаты целевого окна.
//aHWindow - хэндлер целевого окна.
procedure TForm1.ClickByWindow(aHWindow : HWND; aX : Word; aY : Word);
var
  //Координаты мыши.
  //В двух младших байтах должна быть записана координата X.
  //В двух старших байтах должна быть записана координата Y.
  Coordinates : Longword;
begin
  Coordinates := 0;
  Coordinates := aX or (aY shl 16);
 
  //Нажатие левой кнопки мыши.
  SendMessage(aHWindow, WM_LBUTTONDOWN, MK_LBUTTON, Coordinates);
  //Отжатие левой кнопки мыши.
  SendMessage(aHWindow, WM_LBUTTONUP, MK_LBUTTON, Coordinates);
 
  //Нажатие правой кнопки мыши.
  //SendMessage(aHWindow, WM_RBUTTONDOWN, MK_RBUTTON, Coordinates);
  //Отжатие правой кнопки мыши.
  //SendMessage(aHWindow, WM_LBUTTONUP, MK_RBUTTON, Coordinates);
 
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  //Хэндлер главного окна.
  hWindowParent : HWND;
  //Хэндлер дочернего окна.
  hWindowChild : HWND;
begin
  hWindowParent := 0;
  hWindowChild := 0;
 
  //Ищем главное окно Интернет Эксплорера.
 
  hWindowParent := FindWindow('IEFrame', 'Пустая страница - Windows Internet Explorer');
  //Можно искать без указания класса - только по имени:
  //hWindowParent := FindWindow(0, 'Пустая страница - Windows Internet Explorer');
  //Так же можно искать без указания имени - только по имени класса:
  //hWindowParent := FindWindow('IEFrame', 0);
  //Чтобы посмотреть какие имена классов используются, можно воспользоваться приложением
  //WinSight - из дистрибутива Delphi.
 
  if hWindowParent <> 0 then begin
    ShowMessage('Главное окно найдено: hWindowParent = "' + IntToStr(hWindowParent) + '"');
  end else begin
    ShowMessage('Главное окно не найдено"');
    Exit;
  end;
 
  //Для проверки можно проследить за реакцией:
 
  //Свернуть окно.
  SendMessage(hWindowParent, WM_SYSCOMMAND, SC_MINIMIZE, 0);
  //Задержка в 1 секунду.
  Sleep(1000);
  //Развернуть окно.
  SendMessage(hWindowParent, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
 
  //Ищем дочернее окно, которое представляет закладку (в ИЕ 7 или ИЕ 8)
 
  hWindowChild := FindWindowEx(hWindowParent, 0, 'TabWindowClass', 'Пустая страница - Windows Internet Explorer');
  //Поиск окна дочернего элемента тоже можно выполнять поразному - искать только по имени класса или
  //только по имени окна.
 
  if hWindowParent <> 0 then begin
    ShowMessage('Дочернее окно найдено: hWindowChild = "' + IntToStr(hWindowChild) + '"');
  end else begin
    ShowMessage('Дочернее окно не найдено"');
    Exit;
  end;
 
  //Посылаем дочернему окну нужные сообщения
  ClickByWindow(hWindowChild, 200, 200);
end;
 
end.
1
22.10.2009, 11:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2009, 11:39
Помогаю со студенческими работами здесь

Имитация движений мыши
Есть желание сделать некий АимБот, моя задукмка: ищем в приложении пиксель или небольшую картинку и...

Image имитация MouseEnter
Доброго времени суток всем. Помогите советом, как поступить. На форме расположен Image. Мне при...

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

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru