Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программно установить курсор мыши в браузере IE, и кликнуть в окне браузера 
V
    Опции темы
Vladimir_K
Дата 17.1.2008, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Подскажите, пожалста, как программно установить курсор мыши в окне браузера (IE или каком другом) в определенную точку, и кликнуть в этом окне в нужном месте.
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Prof_2000
Дата 18.1.2008, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 26.3.2005
Где: Харьков, Украина

Репутация: 1
Всего: 1



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

Код

uses
  ... Controls;
  ...
  var P: tPoint;
begin
  P.X:= 20;
  P.Y:= 20;
  Mouse.CursorPos:= P;
  mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
  mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
  ...

--------------------
Pereant qui ante nos nostra dixerunt! (лат.)      Да погибнут те, кто раньше нас высказал наши мысли!   
PM MAIL WWW ICQ   Вверх
Vladimir_K
Дата 18.1.2008, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Так, спасибо, это понятно. smile 

А как сделать, чтобы при движении мышкой по окну IE в окне Message, или лучше в хинте рядом с курсором мышки отображались текущие координаты? Ну, чтобы узнать координаты цели, а потом уже программно по этим координатам кликать.
Обрабатываю MouseMove, но у меня это событие привязано к окну формы, а как обрабатывать это событие, если моя прога свернута, а курсор двигается по окну IE?

Это сообщение отредактировал(а) Vladimir_K - 18.1.2008, 22:38
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
CompWorm
Дата 18.1.2008, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: 2
Всего: 31



сделай свой хинт smile  координаты формы, куда выводится текст, равны координатам курсора...


--------------------
PM MAIL   Вверх
Ofer
Дата 19.1.2008, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: 1
Всего: 5



А GetCursorPos не подходит? ;)
PM MAIL ICQ   Вверх
Vladimir_K
Дата 19.1.2008, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Цитата(CompWorm @ 18.1.2008,  22:49)
сделай свой хинт smile  координаты формы, куда выводится текст, равны координатам курсора...

Не понял. Хинт должен отображаться в окне IE. Вот это как сделать? 
В окне своей проги я хинт вывожу без проблем.
user posted image
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Prof_2000
Дата 19.1.2008, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 26.3.2005
Где: Харьков, Украина

Репутация: 1
Всего: 1



CompWorm имел ввиду, что следует создать свою форму с BorderStyle=bsNone.

Я вот накидал примерчик, повесил 2 TLabel, установил форме BorderStyle=bsNone и FormStyle=fsStayOnTop. На обработчик OnClick для lblX повесил:
Код

procedure TForm1.lblXClick(Sender: TObject);
var a : TPoint;
begin
  repeat
    GetCursorPos(a);
    Left := a.X + 10;
    Top := a.Y + 5;
    lblX.Caption := IntToStr(a.X);
    lblY.Caption := IntToStr(a.Y);
    Application.ProcessMessages;
  until false;
end;


--------------------
Pereant qui ante nos nostra dixerunt! (лат.)      Да погибнут те, кто раньше нас высказал наши мысли!   
PM MAIL WWW ICQ   Вверх
Vladimir_K
Дата 19.1.2008, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Для чего я все это делаю: хочу сделать что-то типа проги, которая запоминает движения мыши, а потом их воспроизводит без моего участия, такую, например, как E-Motion Direct 2.0. Только эта прога не учитывает, что соединение с инетом может прерваться, а моя будет соединяться заново.

Попробовал использовать WebBrowser, страница грузится, отображается - все путем.
Но у компонента WebBrowser нет события MouseMove, как отслеживать перемещения мыши, и выводить координаты курсора в хинте рядом с курсором?
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
CompWorm
Дата 19.1.2008, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: 2
Всего: 31



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


Vladimir_K, судя по скриншоту (координаты 150 и 125), ты хочешь в хинт писать координаты именно относительно окна браузера, а не глобальные координаты курсора... это так?
тогда такие значения можно высчитат как глобальная координата мыши - координата окна браузера. 
данные о положении любого окна можно узнать через

Код

BOOL GetWindowRect
(
HWND hWnd,        // дескриптор окна
LPRECT lpRect        // адрес структуры для координат окна
);



--------------------
PM MAIL   Вверх
CompWorm
Дата 19.1.2008, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: 2
Всего: 31



я так долго писал свое сообщение, что ты уже успел раньше меня что-то дописать))))

ты сделай проще прогу:
жмем энтор на клаве и с этого момента пиши координаты мыши (GetCursorPos) в файл... 
далее открываем файл и меняем координаты мыши по тому что в файле (SetCursorPos)...



--------------------
PM MAIL   Вверх
Vladimir_K
Дата 19.1.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Да, так и сделаю.

Но вот с этим как быть: 
Попробовал использовать компонент WebBrowser, страница грузится, отображается - все путем.
Но у компонента WebBrowser нет события MouseMove, как отслеживать перемещения мыши, и выводить координаты курсора в хинте рядом с курсором? 

Это должно быть проще - все в пределах моей проги. А потом уже перейду к вопросу взаимодействия с другими приложениями.
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Vladimir_K
Дата 19.1.2008, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Цитата(Prof_2000 @ 19.1.2008,  15:01)
Я вот накидал примерчик, повесил 2 TLabel, установил форме BorderStyle=bsNone и FormStyle=fsStayOnTop. На обработчик OnClick для lblX повесил...

Да, вот это именно то, что я имел в виду! smile 
Показываются глобальные координаты.
Программку только проблематично закрыть. smile 

А как же быть с MouseMove в WebBrowser?

Добавлено через 2 минуты и 56 секунд
Цитата(CompWorm @ 19.1.2008,  16:08)
Vladimir_K, судя по скриншоту (координаты 150 и 125), ты хочешь в хинт писать координаты именно относительно окна браузера, а не глобальные координаты курсора... это так?
тогда такие значения можно высчитат как глобальная координата мыши - координата окна браузера. 
данные о положении любого окна можно узнать через

Код

BOOL GetWindowRect
(
HWND hWnd,        // дескриптор окна
LPRECT lpRect        // адрес структуры для координат окна
);

Это уже посложнее будет... Потом этим вопросом займусь.
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Vladimir_K
Дата 19.1.2008, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Сделал так:
Код

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var P: tPoint;
begin
 repeat
  GetCursorPos(P);
  Label1.Caption:= 'X = ' + IntToStr(P.X);
  Label2.Caption:= 'Y = ' + IntToStr(P.Y);
  Application.ProcessMessages;
 until false;
end;

Теперь у меня отображаются глобальные координаты, а как вычислить координаты именно относительно окна моей проги (формы)? 
Что-то с этим вопросом я застопорился.
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
CompWorm
  Дата 20.1.2008, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: 2
Всего: 31



Цитата

Теперь у меня отображаются глобальные координаты, а как вычислить координаты именно относительно окна моей проги (формы)? 
Что-то с этим вопросом я застопорился. 


Код

...
  GetCursorPos(P);
  Label1.Caption:= 'X = ' + IntToStr(P.X - Form1.Left);
  Label2.Caption:= 'Y = ' + IntToStr(P.Y - Form1.Top);
...


уж до этого мог бы догадаться и сам smile 


--------------------
PM MAIL   Вверх
Vladimir_K
Дата 20.1.2008, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Спасибо! +
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0542 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.