Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.09;
Скачать: CL | DM;

Вниз

Эмуляция нажатие кнопки   Найти похожие ветки 

 
Андрей Л.   (2007-08-16 07:39) [0]

На форме лежит браузер. Загружена страничка.
Надо програмно нажать кнопку.
Делаю так:
   x := round(x * 65535 / screen.width);
   y := round(y * 65535 / screen.height);
   mouse_event(mouseeventf_absolute or MOUSEEVENTF_MOVE, X, Y, 0, 0);
   mouse_event(mouseeventf_absolute or mouseeventf_leftdown, x, y, 0, 0);
   mouse_event(mouseeventf_absolute or mouseeventf_leftup, x, y, 0, 0);

Оно конечно хорошо, но хочется свернуть форму, а для этого кода нужен фокус.

 PostMessage(Form1.WB1.Handle,WM_LBUTTONDOWN,x,y);
 PostMessage(Form1.WB1.Handle,WM_LBUTTONUP,x,y);
Не срабатывает. Понимаю, что что-то не так делаю, но вот что понять не могу. Подскажите. Примного благодарен.


 
oldman ©   (2007-08-16 12:23) [1]

А зачем нажимать кнопку, если сразу можно вызвать функцию?


 
DVM ©   (2007-08-16 12:26) [2]


> Андрей Л.  

объектная модель браузера IE позволяет обратиться ко всему, что находится на страничке в том числе из delphi


 
iXT ©   (2007-08-16 12:27) [3]

IdHttp + Разбор кода странички


 
Johnnnnnnnn   (2007-08-16 15:39) [4]

x := round(x * 65535 / screen.width);
y := round(y * 65535 / screen.height);
SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

i vs ebydet rabotat


 
Андрей Л.   (2007-08-16 15:41) [5]

Значит так. Пишу я кликер. Кста вопрос который я задал висит на многих форумах по Delphi и там нет внятного ответа. PostMessage, Sendinput, Send message с WB не работают, как я понял.

Теперь по порядку
> oldman ©   (16.08.07 12:23) [1]
> А зачем нажимать кнопку, если сразу можно вызвать функцию?
>


Как оказалось, в скрипте код, который передает координаты мыши в момент клика на сервер, что в свою очередь легко запалится, если вызывать функцию, я ведь прав? Если нет - поправьте, буду только рад.


> iXT ©   (16.08.07 12:27) [3]
> IdHttp + Разбор кода странички

Уж очень он глючный + нужно в браузер грузить + координаты передавать чтоб не спалиться =)


> DVM ©   (16.08.07 12:26) [2]
> > Андрей Л.  объектная модель браузера IE позволяет обратиться
> ко всему, что находится на страничке в том числе из delphi

Обращался. Делаю анализ странички, чтоб координаты кнопки вычислить. Там тьма-тьмущая вложенных фреймов, что работу затрудняет оч. сильно, по крайней мере для меня. Да к тому все теже злосчастные координаты.

Сейчас единственное решение, кот. возникло это не сворачивать форму, сделать иконку в трее и работать с AlphablendValue;

Т.е. в момент нажатия запоминаются координаты курсора, потом он перемещается на кнопку, AlphaBlendValue формы = 1. Ее не видно, но нажимать можно (чтоб в глазах не ребило), нажатие
  mouse_event(mouseeventf_absolute or MOUSEEVENTF_MOVE, X, Y, 0, 0);
  mouse_event(mouseeventf_absolute or mouseeventf_leftdown, x, y, 0, 0);
  mouse_event(mouseeventf_absolute or mouseeventf_leftup, x, y, 0, 0);

И обратно на координаты. Насколько это рабочий варинт - не знаю, буду тестить. Есть у кого-то предложения, как сделать проще???


 
Андрей Л.   (2007-08-16 15:44) [6]


> Johnnnnnnnn   (16.08.07 15:39) [4]
> x := round(x * 65535 / screen.width);y := round(y * 65535
> / screen.height);SetCursorPos(x,y);mouse_event(MOUSEEVENTF_LEFTDOWN,
>  0,0,0,0);mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);i vs ebydet
> rabotat

Да. Оно работает, но вот курсор то перемещается физически, при этом форму не свернешь, да и вообще на компе не возможно работать, если жать часто.


 
DVM ©   (2007-08-16 15:50) [7]


> Обращался. Делаю анализ странички, чтоб координаты кнопки
> вычислить. Там тьма-тьмущая вложенных фреймов, что работу
> затрудняет оч. сильно, по крайней мере для меня. Да к тому
> все теже злосчастные координаты.

Как обращался?

Там обращение будет не сложнее чем, к примеру, browser.document.objects[].name  (прямо так писать не надо - это лишь иллюстрация)  и т.д.


 
Андрей Л.   (2007-08-16 15:52) [8]

var
 frames: IHTMLFramesCollection2;
 i: integer;
 ov1: OleVariant;
 iDisp: IDispatch;
 IWindow2: IHTMLWindow2;
begin
 if not assigned(aDoer) then
   Exit;
 aDoer(iDoc);
 frames := iDoc.frames;
 if not assigned(frames) then
   exit;
 if frames.length = 0 then
   exit;
 for i := 1 to frames.length do
 begin
   ov1 := i - 1;
   try
     iDisp := frames.item(ov1);
     iDisp.QueryInterface(IHTMLWindow2, IWindow2);
     if assigned(IWindow2) then
       DoWithFrames(IWindow2.document, aDoer);
   except
   end;
end;

Для выхватывания вложенных фреймов


 
DVM ©   (2007-08-16 15:54) [9]


> Андрей Л.   (16.08.07 15:52) [8]

Ну так ты на правильном пути, поверь. Кликанье по кнопкам -это непрофессионально.


 
Андрей Л.   (2007-08-16 15:57) [10]


> DVM ©   (16.08.07 15:54) [9]
> > Андрей Л.   (16.08.07 15:52) [8] Ну так ты на правильном
> пути, поверь. Кликанье по кнопкам -это непрофессионально.
>


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

Непрофессионально не спорю, зато риск минимален =) Пишу то для себя. Кста никто так и не ответил почему не работают SendMessage, PostMessage и Sendinput


 
Leonid Troyanovsky ©   (2007-08-16 16:11) [11]


> Андрей Л.   (16.08.07 15:57) [10]

> то для себя. Кста никто так и не ответил почему не работают
> SendMessage, PostMessage и Sendinput

Возьми книжку Джефа Рихтера "Windows для профи"
почитай главу про очередь разупорядоченного ввода.

Там все по полочкам разложено, и станет тебе ясно,
что путем Post or SendMessage можно достичь лишь
весьма приблизительной имитации.

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2007.09.09;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.025 c
4-1173292820
dRake
2007-03-07 21:40
2007.09.09
Как програмно разблокировать файл? (+)


15-1187188524
Cobalt
2007-08-15 18:35
2007.09.09
легкий текстовый редактор rtf


3-1178093521
Анна
2007-05-02 12:12
2007.09.09
Какими компонентами пользоваться для доступа к БД?


2-1187172815
Poroshm
2007-08-15 14:13
2007.09.09
Продолжительность MP3 файла


15-1187180515
Andy BitOff
2007-08-15 16:21
2007.09.09
Есть ли функция возвращающая...